Added sorting options for list: best/worst/newest/oldest (via /list).
This commit is contained in:
		
				
					committed by
					
						 Steffen Schröder
						Steffen Schröder
					
				
			
			
				
	
			
			
			
						parent
						
							c23f7dd5b9
						
					
				
				
					commit
					84b44c29b9
				
			| @@ -316,7 +316,79 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb | |||||||
| 	 * @param Player $player | 	 * @param Player $player | ||||||
| 	 */ | 	 */ | ||||||
| 	public function command_List(array $chatCallback, Player $player) { | 	public function command_List(array $chatCallback, Player $player) { | ||||||
| 		$this->maniaControl->mapManager->mapList->showMapList($player); | 		$chatCommands = explode(' ', $chatCallback[1][2]); | ||||||
|  | 		$this->maniaControl->mapManager->mapList->playerCloseWidget($player); | ||||||
|  | 		if(isset($chatCommands[1])) { | ||||||
|  | 			if($chatCommands[1] == ' ' || $chatCommands[1] == 'all') { | ||||||
|  | 				$this->maniaControl->mapManager->mapList->showMapList($player); | ||||||
|  | 			} elseif($chatCommands[1] == 'best') { | ||||||
|  | 				$this->showMapListKarma(true, $player); | ||||||
|  | 			} elseif($chatCommands[1] == 'worst') { | ||||||
|  | 				$this->showMapListKarma(false, $player); | ||||||
|  | 			} elseif($chatCommands[1] == 'newest') { | ||||||
|  | 				$this->showMapListDate(true, $player); | ||||||
|  | 			} elseif($chatCommands[1] == 'oldest') { | ||||||
|  | 				$this->showMapListDate(false, $player); | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			$this->maniaControl->mapManager->mapList->showMapList($player); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	private function showMapListKarma($best, $player) { | ||||||
|  | 		/** @var \MCTeam\KarmaPlugin $karmaPlugin */ | ||||||
|  | 		$karmaPlugin = $this->maniaControl->pluginManager->getPlugin(MapList::DEFAULT_KARMA_PLUGIN); | ||||||
|  | 		if($karmaPlugin) { | ||||||
|  | 			$maps = $this->maniaControl->mapManager->getMaps(); | ||||||
|  | 			$mapList = array(); | ||||||
|  | 			foreach($maps as $map) { | ||||||
|  | 				if($map instanceof Map) { | ||||||
|  | 					$votes = $karmaPlugin->getMapVotes($map); | ||||||
|  | 					$min = 0; | ||||||
|  | 					$plus = 0; | ||||||
|  | 					foreach($votes as $vote) { | ||||||
|  | 						if(isset($vote->vote)) { | ||||||
|  | 							if($vote->vote != 0.5) { | ||||||
|  | 								if($vote->vote < 0.5) { | ||||||
|  | 									$min = $min+$vote->count; | ||||||
|  | 								} else { | ||||||
|  | 									$plus = $plus+$vote->count; | ||||||
|  | 								} | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					$map->karma = $plus-$min; | ||||||
|  | 					$mapList[] = $map; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			usort($mapList, array($this, 'sortByKarma')); | ||||||
|  | 			if($best) { | ||||||
|  | 				$mapList = array_reverse($mapList); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			$this->maniaControl->mapManager->mapList->showMapList($player, $mapList); | ||||||
|  | 		} else { | ||||||
|  | 			$this->maniaControl->chat->sendError('KarmaPlugin is not enabled!', $player->login); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	private function sortByKarma($a, $b) { | ||||||
|  | 		return $a->karma - $b->karma; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	private function showMapListDate($newest, $player) { | ||||||
|  | 		$maps = $this->maniaControl->mapManager->getMaps(); | ||||||
|  |  | ||||||
|  | 		usort($maps, function($a, $b) { | ||||||
|  | 			return $a->index - $b->index; | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		if($newest) { | ||||||
|  | 			$maps = array_reverse($maps); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		$this->maniaControl->mapManager->mapList->showMapList($player, $maps); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
|   | |||||||
| @@ -123,19 +123,20 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { | |||||||
| 		// Get Maps | 		// Get Maps | ||||||
| 		$mapList = array(); | 		$mapList = array(); | ||||||
| 		if (is_array($maps)) { | 		if (is_array($maps)) { | ||||||
| 			$mapList = $maps; | 			$mapList = array_slice($maps, $chunk, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE); | ||||||
| 			$pageCount = ceil(count($mapList) / self::MAX_MAPS_PER_PAGE); | 			$this->mapsInListShown[$player->login] = $maps; | ||||||
|  | 			$pageCount = ceil(count($maps) / self::MAX_MAPS_PER_PAGE); | ||||||
|  | 		} | ||||||
|  | 		else if (array_key_exists($player->login, $this->mapsInListShown)) { | ||||||
|  | 			$completeList = $this->mapsInListShown[$player->login]; | ||||||
|  | 			$this->mapsInListShown[$player->login] = $completeList; | ||||||
|  | 			$mapList = array_slice($completeList, $chunk * self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE); | ||||||
|  | 			$pageCount = ceil(count($completeList) / self::MAX_MAPS_PER_PAGE); | ||||||
| 		} | 		} | ||||||
| 		else if ($maps !== 'redirect') { | 		else if ($maps !== 'redirect') { | ||||||
| 			$mapList = $this->maniaControl->mapManager->getMaps($chunk * self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE); | 			$mapList = $this->maniaControl->mapManager->getMaps($chunk * self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE); | ||||||
| 			$pageCount = ceil($this->maniaControl->mapManager->getMapsCount() / self::MAX_MAPS_PER_PAGE); | 			$pageCount = ceil($this->maniaControl->mapManager->getMapsCount() / self::MAX_MAPS_PER_PAGE); | ||||||
| 		} | 		} | ||||||
| 		else if (array_key_exists($player->login, $this->mapsInListShown)) { |  | ||||||
| 			$mapList = $this->mapsInListShown[$player->login]; |  | ||||||
| 			$pageCount = ceil(count($mapList) / self::MAX_MAPS_PER_PAGE); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		$this->mapsInListShown[$player->login] = $mapList; |  | ||||||
| 		 | 		 | ||||||
| 		// Create ManiaLink | 		// Create ManiaLink | ||||||
| 		$maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID); | 		$maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID); | ||||||
| @@ -422,6 +423,21 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { | |||||||
| 				$karma = $karmaPlugin->getMapKarma($map); | 				$karma = $karmaPlugin->getMapKarma($map); | ||||||
| 				$votes = $karmaPlugin->getMapVotes($map); | 				$votes = $karmaPlugin->getMapVotes($map); | ||||||
| 				if (is_numeric($karma)) { | 				if (is_numeric($karma)) { | ||||||
|  | 					$min = 0; | ||||||
|  | 					$plus = 0; | ||||||
|  | 					foreach($votes as $vote) { | ||||||
|  | 						if(isset($vote->vote)) { | ||||||
|  | 							if($vote->vote != 0.5) { | ||||||
|  | 								if($vote->vote < 0.5) { | ||||||
|  | 									$min = $min+$vote->count; | ||||||
|  | 								} else { | ||||||
|  | 									$plus = $plus+$vote->count; | ||||||
|  | 								} | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					$endKarma = $plus-$min; | ||||||
|  |  | ||||||
| 					$karmaGauge = new Gauge(); | 					$karmaGauge = new Gauge(); | ||||||
| 					$mapFrame->add($karmaGauge); | 					$mapFrame->add($karmaGauge); | ||||||
| 					$karmaGauge->setZ(2); | 					$karmaGauge->setZ(2); | ||||||
| @@ -441,7 +457,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { | |||||||
| 					$karmaLabel->setTextSize(0.9); | 					$karmaLabel->setTextSize(0.9); | ||||||
| 					$karmaLabel->setTextColor('000'); | 					$karmaLabel->setTextColor('000'); | ||||||
| 					$karmaLabel->setAlign(Control::CENTER, Control::CENTER); | 					$karmaLabel->setAlign(Control::CENTER, Control::CENTER); | ||||||
| 					$karmaLabel->setText('  ' . round($karma * 100.) . '% (' . $votes['count'] . ')'); | 					$karmaLabel->setText('  ' . $endKarma . ' (' . $votes['count'] . 'x / ' . round($karma * 100.) . '%)'); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| @@ -533,6 +549,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { | |||||||
| 	 */ | 	 */ | ||||||
| 	public function closeWidget(Player $player) { | 	public function closeWidget(Player $player) { | ||||||
| 		unset($this->mapListShown[$player->login]); | 		unset($this->mapListShown[$player->login]); | ||||||
|  | 		unset($this->mapsInListShown[$player->login]); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| @@ -542,6 +559,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener { | |||||||
| 	 */ | 	 */ | ||||||
| 	public function playerCloseWidget(Player $player) { | 	public function playerCloseWidget(Player $player) { | ||||||
| 		unset($this->mapListShown[$player->login]); | 		unset($this->mapListShown[$player->login]); | ||||||
|  | 		unset($this->mapsInListShown[$player->login]); | ||||||
| 		$this->maniaControl->manialinkManager->closeWidget($player); | 		$this->maniaControl->manialinkManager->closeWidget($player); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user