some improvements

This commit is contained in:
kremsy
2014-02-06 21:18:25 +01:00
committed by Steffen Schröder
parent 6ccb5117ae
commit c38f6011b8
7 changed files with 248 additions and 33 deletions

View File

@ -74,9 +74,9 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
$this->registerStat(StatisticCollector::STAT_ON_DEATH, 50, "D");
$this->registerStat(StatisticCollector::STAT_ON_CAPTURE, 60, "C");
$this->registerStat(StatisticManager::SPECIAL_STAT_KD_RATIO, 70, "K/D", 10, StatisticManager::STAT_TYPE_FLOAT);
$this->registerStat(StatisticManager::SPECIAL_STAT_LASER_ACC, 80, "Lacc", 13, StatisticManager::STAT_TYPE_FLOAT);
$this->registerStat(StatisticManager::SPECIAL_STAT_HITS_PH, 85, "H/h", 13, StatisticManager::STAT_TYPE_FLOAT);
$this->registerStat(StatisticManager::SPECIAL_STAT_KD_RATIO, 70, "K/D", 12, StatisticManager::STAT_TYPE_FLOAT);
$this->registerStat(StatisticManager::SPECIAL_STAT_LASER_ACC, 80, "Lacc", 15, StatisticManager::STAT_TYPE_FLOAT);
$this->registerStat(StatisticManager::SPECIAL_STAT_HITS_PH, 85, "H/h", 15, StatisticManager::STAT_TYPE_FLOAT);
}
/**
@ -90,7 +90,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
}
public function registerStat($statName, $order, $headShortCut, $width = 8, $format = StatisticManager::STAT_TYPE_INT) {
public function registerStat($statName, $order, $headShortCut, $width = 10, $format = StatisticManager::STAT_TYPE_INT) {
$this->statArray[$order] = array();
$this->statArray[$order]["Name"] = $statName;
$this->statArray[$order]["HeadShortCut"] = '$o' . $headShortCut;

View File

@ -23,6 +23,7 @@ class StatisticCollector implements CallbackListener {
* Statistics
*/
const STAT_PLAYTIME = 'Play Time';
const STAT_MAP_WINS = 'Map Wins';
const STAT_ON_SHOOT = 'Shots';
const STAT_ON_NEARMISS = 'Near Misses';
const STAT_ON_CAPTURE = 'Captures';
@ -53,6 +54,7 @@ class StatisticCollector implements CallbackListener {
private $maniaControl = null;
private $onShootArray = array();
/**
* Construct player manager
*
@ -81,6 +83,7 @@ class StatisticCollector implements CallbackListener {
public function onInit(array $callback) {
//Define Stats MetaData
$this->maniaControl->statisticManager->defineStatMetaData(self::STAT_PLAYTIME, StatisticManager::STAT_TYPE_TIME);
$this->maniaControl->statisticManager->defineStatMetaData(self::STAT_MAP_WINS);
$this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_SHOOT);
$this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_NEARMISS);
$this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ON_CAPTURE);
@ -99,6 +102,25 @@ class StatisticCollector implements CallbackListener {
$this->maniaControl->statisticManager->defineStatMetaData(self::STAT_ARROW_SHOT);
}
/**
* Handle EndMap
*
* @param array $callback
*/
public function onEndMap(array $callback) {
//Check for Minimum PlayerCount
if (count($this->maniaControl->playerManager->getPlayers()) < $this->maniaControl->settingManager->getSetting($this, self::SETTING_COLLECT_STATS_MINPLAYERS)) {
return;
}
$leaders = $this->maniaControl->server->rankingManager->getLeaders();
foreach($leaders as $leaderLogin) {
$leader = $this->maniaControl->playerManager->getPlayer($leaderLogin);
$this->maniaControl->statisticManager->incrementStat(self::STAT_MAP_WINS, $leader);
}
}
/**
* Handle Player Shoots
*
@ -142,7 +164,6 @@ class StatisticCollector implements CallbackListener {
}
}
/**
* Gets the Weapon stat
*
@ -179,7 +200,6 @@ class StatisticCollector implements CallbackListener {
}
}
/**
* Insert OnShoot Statistic when a player leaves
*
@ -213,7 +233,7 @@ class StatisticCollector implements CallbackListener {
return;
}
//Check for Minplayer
//Check for Minimum PlayerCount
if (count($this->maniaControl->playerManager->getPlayers()) < $this->maniaControl->settingManager->getSetting($this, self::SETTING_COLLECT_STATS_MINPLAYERS)) {
return;
}

View File

@ -65,6 +65,52 @@ class StatisticManager {
* @return int
*/
public function getStatisticData($statName, $playerId, $serverIndex = -1) {
//Handle Special Stats
switch($statName) {
case self::SPECIAL_STAT_KD_RATIO:
$kills = $this->getStatisticData(StatisticCollector::STAT_ON_KILL, $playerId, $serverIndex);
$deaths = $this->getStatisticData(StatisticCollector::STAT_ON_DEATH, $playerId, $serverIndex);
if ($deaths == 0) {
return -1;
}
return intval($kills) / intval($deaths);
case self::SPECIAL_STAT_HITS_PH:
$hits = $this->getStatisticData(StatisticCollector::STAT_ON_HIT, $playerId, $serverIndex);
$time = $this->getStatisticData(StatisticCollector::STAT_PLAYTIME, $playerId, $serverIndex);
if ($time == 0) {
return -1;
}
return intval($hits) / (intval($time) / 3600);
case self::SPECIAL_STAT_ARROW_ACC:
$hits = $this->getStatisticData(StatisticCollector::STAT_ARROW_HIT, $playerId, $serverIndex);
$shots = $this->getStatisticData(StatisticCollector::STAT_ARROW_SHOT, $playerId, $serverIndex);
if ($shots == 0) {
return -1;
}
return intval($hits) / intval($shots);
case self::SPECIAL_STAT_LASER_ACC:
$hits = $this->getStatisticData(StatisticCollector::STAT_LASER_HIT, $playerId, $serverIndex);
$shots = $this->getStatisticData(StatisticCollector::STAT_LASER_SHOT, $playerId, $serverIndex);
if ($shots == 0) {
return -1;
}
return intval($hits) / intval($shots);
case self::SPECIAL_STAT_NUCLEUS_ACC:
$hits = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_HIT, $playerId, $serverIndex);
$shots = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_SHOT, $playerId, $serverIndex);
if ($shots == 0) {
return -1;
}
return intval($hits) / intval($shots);
case self::SPECIAL_STAT_ROCKET_ACC:
$hits = $this->getStatisticData(StatisticCollector::STAT_ROCKET_HIT, $playerId, $serverIndex);
$shots = $this->getStatisticData(StatisticCollector::STAT_ROCKET_SHOT, $playerId, $serverIndex);
if ($shots == 0) {
return -1;
}
return intval($hits) / intval($shots);
}
$mysqli = $this->maniaControl->database->mysqli;
$statId = $this->getStatId($statName);
@ -81,7 +127,7 @@ class StatisticManager {
$result = $mysqli->query($query);
if (!$result) {
trigger_error($mysqli->error);
return null;
return -1;
}
$row = $result->fetch_object();
@ -108,7 +154,7 @@ class StatisticManager {
$statId = $this->getStatId($statName);
if ($minValue == -1) {
$query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " ORDER BY value DESC LIMIT 100;";
$query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " ORDER BY value DESC;";
} else {
$query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " AND value >= " . $minValue . " ORDER BY value DESC;";
}