- fixed join/leave messages
- improved time formatter - bugfix setting manager - donation plugin
This commit is contained in:
		| @@ -23,12 +23,11 @@ class CommandManager implements CallbackListener, CommandListener { | ||||
| 	 */ | ||||
| 	private $maniaControl = null; | ||||
| 	private $commandListeners = array(); | ||||
| 	private $openBills = array(); | ||||
| 	private $serverShutdownTime = -1; | ||||
| 	private $serverShutdownEmpty = false; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct commands handler | ||||
| 	 * Construct commands manager | ||||
| 	 * | ||||
| 	 * @param \ManiaControl\ManiaControl $maniaControl        	 | ||||
| 	 */ | ||||
| @@ -36,12 +35,10 @@ class CommandManager implements CallbackListener, CommandListener { | ||||
| 		$this->maniaControl = $maniaControl; | ||||
| 		 | ||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MC_5_SECOND, $this, 'each5Seconds'); | ||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_BILLUPDATED, $this, 'handleBillUpdated'); | ||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERCHAT, $this, 'handleChatCallback'); | ||||
| 		 | ||||
| 		// Register basic commands | ||||
| 		$commands = array('help', 'version', 'shutdown', 'shutdownserver', 'systeminfo', 'setservername', 'getplanets', 'donate',  | ||||
| 			'pay', 'kick'); | ||||
| 		$commands = array('version', 'shutdown', 'shutdownserver', 'systeminfo', 'setservername', 'kick'); | ||||
| 		foreach ($commands as $command) { | ||||
| 			$this->registerCommandListener($command, $this, 'command_' . $command); | ||||
| 		} | ||||
| @@ -90,56 +87,16 @@ class CommandManager implements CallbackListener, CommandListener { | ||||
| 		$command = explode(" ", substr($callback[1][2], 1)); | ||||
| 		$command = strtolower($command[0]); | ||||
| 		if (!array_key_exists($command, $this->commandListeners) || !is_array($this->commandListeners[$command])) { | ||||
| 			// No command handler registered | ||||
| 			// No command listener registered | ||||
| 			return true; | ||||
| 		} | ||||
| 		// Inform command handlers | ||||
| 		// Inform command listeners | ||||
| 		foreach ($this->commandListeners[$command] as $listener) { | ||||
| 			call_user_func(array($listener[0], $listener[1]), $callback, $player); | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle bill updated callback | ||||
| 	 * | ||||
| 	 * @param array $callback        	 | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	public function handleBillUpdated(array $callback) { | ||||
| 		$bill = $callback[1]; | ||||
| 		if (!array_key_exists($bill[0], $this->openBills)) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		$login = $this->openBills[$bill[0]]; | ||||
| 		switch ($bill[1]) { | ||||
| 			case 4: | ||||
| 				{ | ||||
| 					// Payed | ||||
| 					$message = 'Success! Thanks.'; | ||||
| 					$this->maniaControl->chat->sendSuccess($message, $login); | ||||
| 					unset($this->openBills[$bill[0]]); | ||||
| 					break; | ||||
| 				} | ||||
| 			case 5: | ||||
| 				{ | ||||
| 					// Refused | ||||
| 					$message = 'Transaction cancelled.'; | ||||
| 					$this->maniaControl->chat->sendError($message, $login); | ||||
| 					unset($this->openBills[$bill[0]]); | ||||
| 					break; | ||||
| 				} | ||||
| 			case 6: | ||||
| 				{ | ||||
| 					// Error | ||||
| 					$this->maniaControl->chat->sendError($bill[2], $login); | ||||
| 					unset($this->openBills[$bill[0]]); | ||||
| 					break; | ||||
| 				} | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Send ManiaControl version | ||||
| 	 * | ||||
| @@ -152,138 +109,6 @@ class CommandManager implements CallbackListener, CommandListener { | ||||
| 		return $this->maniaControl->chat->sendInformation($message, $login); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Send help list | ||||
| 	 * | ||||
| 	 * @param array $chat        	 | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	private function command_help(array $chat) { | ||||
| 		$login = $chat[1][1]; | ||||
| 		// TODO: improve help command | ||||
| 		// TODO: enable help for specific commands | ||||
| 		$list = 'Available commands: '; | ||||
| 		$commands = array_keys($this->commandHandlers); | ||||
| 		$count = count($commands); | ||||
| 		for ($index = 0; $index < $count; $index++) { | ||||
| 			if (!$this->maniaControl->authentication->checkRight($login, $this->getRightsLevel($commands[$index], 'superadmin'))) { | ||||
| 				unset($commands[$index]); | ||||
| 			} | ||||
| 		} | ||||
| 		$count = count($commands); | ||||
| 		$index = 0; | ||||
| 		foreach ($commands as $command) { | ||||
| 			$list .= $command; | ||||
| 			if ($index < $count - 1) { | ||||
| 				$list .= ', '; | ||||
| 			} | ||||
| 			$index++; | ||||
| 		} | ||||
| 		return $this->maniaControl->chat->sendInformation($list, $login); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle getplanets command | ||||
| 	 * | ||||
| 	 * @param array $chat        	 | ||||
| 	 * @param Player $player        	 | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	private function command_getplanets(array $chat, Player $player) { | ||||
| 		if (!$this->maniaControl->authentication->checkRight($player, Authentication::AUTH_LEVEL_ADMIN)) { | ||||
| 			$this->maniaControl->authentication->sendNotAllowed($player); | ||||
| 			return false; | ||||
| 		} | ||||
| 		if (!$this->maniaControl->client->query('GetServerPlanets')) { | ||||
| 			trigger_error("Couldn't retrieve server planets. " . $this->maniaControl->getClientErrorText()); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$planets = $this->maniaControl->client->getResponse(); | ||||
| 		$message = "This Server has {$planets} Planets!"; | ||||
| 		return $this->maniaControl->chat->sendInformation($message, $player->login); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle donate command | ||||
| 	 * | ||||
| 	 * @param array $chat        	 | ||||
| 	 * @param Player $player        	 | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	private function command_donate(array $chat, Player $player) { | ||||
| 		$params = explode(' ', $chat[1][2]); | ||||
| 		if (count($params) < 2) { | ||||
| 			// TODO: send usage information | ||||
| 			return false; | ||||
| 		} | ||||
| 		$amount = (int) $params[1]; | ||||
| 		if (!$amount || $amount <= 0) { | ||||
| 			// TODO: send usage information | ||||
| 			return false; | ||||
| 		} | ||||
| 		if (count($params) >= 3) { | ||||
| 			$receiver = $params[2]; | ||||
| 			$receiverPlayer = $this->maniaControl->playerHandler->getPlayer($receiver); | ||||
| 			$receiverName = ($receiverPlayer ? $receiverPlayer['NickName'] : $receiver); | ||||
| 		} | ||||
| 		else { | ||||
| 			$receiver = ''; | ||||
| 			$receiverName = $this->maniaControl->server->getName(); | ||||
| 		} | ||||
| 		$message = 'Donate ' . $amount . ' Planets to $<' . $receiverName . '$>?'; | ||||
| 		if (!$this->maniaControl->client->query('SendBill', $pl, $amount, $message, $receiver)) { | ||||
| 			trigger_error( | ||||
| 					"Couldn't create donation of {$amount} planets from '{$player->login}' for '{$receiver}'. " . | ||||
| 							 $this->maniaControl->getClientErrorText()); | ||||
| 			$this->maniaControl->chat->sendError("Creating donation failed.", $player->login); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$bill = $this->maniaControl->client->getResponse(); | ||||
| 		$this->openBills[$bill] = $player->login; | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle pay command | ||||
| 	 * | ||||
| 	 * @param array $chat        	 | ||||
| 	 * @param Player $player        	 | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	private function command_pay(array $chat, Player $player) { | ||||
| 		if (!$this->maniaControl->authentication->checkRight($player, Authentication::AUTH_LEVEL_SUPERADMIN)) { | ||||
| 			$this->maniaControl->authentication->sendNotAllowed($player); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$params = explode(' ', $chat[1][2]); | ||||
| 		if (count($params) < 2) { | ||||
| 			// TODO: send usage information | ||||
| 			return false; | ||||
| 		} | ||||
| 		$amount = (int) $params[1]; | ||||
| 		if (!$amount || $amount <= 0) { | ||||
| 			// TODO: send usage information | ||||
| 			return false; | ||||
| 		} | ||||
| 		if (count($params) >= 3) { | ||||
| 			$receiver = $params[2]; | ||||
| 		} | ||||
| 		else { | ||||
| 			$receiver = $player->login; | ||||
| 		} | ||||
| 		$message = 'Payout from $<' . $this->maniaControl->server->getName() . '$>.'; | ||||
| 		if (!$this->maniaControl->client->query('Pay', $receiver, $amount, $message)) { | ||||
| 			trigger_error( | ||||
| 					"Couldn't create payout of {$amount} planets by '{$player->login}' for '{$receiver}'. " . | ||||
| 							 $this->maniaControl->getClientErrorText()); | ||||
| 			$this->maniaControl->chat->sendError("Creating payout failed.", $player->login); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$bill = $this->maniaControl->client->getResponse(); | ||||
| 		$this->openBills[$bill] = $player->login; | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle systeminfo command | ||||
| 	 * | ||||
| @@ -375,7 +200,7 @@ class CommandManager implements CallbackListener, CommandListener { | ||||
| 			return false; | ||||
| 		} | ||||
| 		$target = $params[1]; | ||||
| 		$target = $this->maniaControl->playerHandler->getPlayer($target); | ||||
| 		$target = $this->maniaControl->playerManager->getPlayer($target); | ||||
| 		if (!$target) { | ||||
| 			$this->maniaControl->chat->sendError("Invalid player login.", $player->login); | ||||
| 			return false; | ||||
|   | ||||
| @@ -35,21 +35,21 @@ abstract class Formatter { | ||||
| 	/** | ||||
| 	 * Formats the given time (seconds) to hh:mm:ss | ||||
| 	 * | ||||
| 	 * @param int $time        	 | ||||
| 	 * @param int $seconds        	 | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public static function formatTimeH($time) { | ||||
| 	public static function formatTimeH($seconds) { | ||||
| 		return gmdate("H:i:s", $seconds); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Convert the given time (seconds) to mysql timestamp | ||||
| 	 * | ||||
| 	 * @param int $time        	 | ||||
| 	 * @param int $seconds        	 | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public static function formatTimestamp($time) { | ||||
| 		return date("Y-m-d H:i:s", $time); | ||||
| 	public static function formatTimestamp($seconds) { | ||||
| 		return date("Y-m-d H:i:s", $seconds); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|   | ||||
| @@ -15,6 +15,7 @@ require_once __DIR__ . '/Chat.php'; | ||||
| require_once __DIR__ . '/Commands/CommandManager.php'; | ||||
| require_once __DIR__ . '/Database.php'; | ||||
| require_once __DIR__ . '/FileUtil.php'; | ||||
| require_once __DIR__ . '/Formatter.php'; | ||||
| require_once __DIR__ . '/Manialinks/ManialinkIdHandler.php'; | ||||
| require_once __DIR__ . '/Manialinks/ManialinkUtil.php'; | ||||
| require_once __DIR__ . '/Maps/Map.php'; | ||||
|   | ||||
| @@ -4,6 +4,7 @@ namespace ManiaControl\Players; | ||||
|  | ||||
| require_once __DIR__ . '/Player.php'; | ||||
|  | ||||
| use ManiaControl\Formatter; | ||||
| use ManiaControl\ManiaControl; | ||||
| use ManiaControl\Callbacks\CallbackListener; | ||||
| use ManiaControl\Callbacks\CallbackManager; | ||||
| @@ -18,7 +19,7 @@ class PlayerManager implements CallbackListener { | ||||
| 	 * Constants | ||||
| 	 */ | ||||
| 	const TABLE_PLAYERS = 'mc_players'; | ||||
| 	const SETTING_LEAVE_JOIN_MESSAGES = 'EnableLeaveJoinMessages'; | ||||
| 	const SETTING_JOIN_LEAVE_MESSAGES = 'Enable Join & Leave Messages'; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Private properties | ||||
| @@ -27,7 +28,7 @@ class PlayerManager implements CallbackListener { | ||||
| 	private $playerList = array(); | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct player handler | ||||
| 	 * Construct player manager | ||||
| 	 * | ||||
| 	 * @param \ManiaControl\ManiaControl $maniaControl        	 | ||||
| 	 */ | ||||
| @@ -82,8 +83,9 @@ class PlayerManager implements CallbackListener { | ||||
| 	 */ | ||||
| 	public function onInit(array $callback) { | ||||
| 		// register settings | ||||
| 		$this->maniaControl->settingManager->initSetting($this, "Leave Join Messages", true); | ||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES, false); | ||||
| 		 | ||||
| 		// Add all players | ||||
| 		$this->maniaControl->client->query('GetPlayerList', 300, 0, 2); | ||||
| 		$playerList = $this->maniaControl->client->getResponse(); | ||||
| 		foreach ($playerList as $playerItem) { | ||||
| @@ -109,7 +111,7 @@ class PlayerManager implements CallbackListener { | ||||
| 		$player = new Player($playerInfo); | ||||
| 		$this->addPlayer($player); | ||||
| 		 | ||||
| 		if (!$this->maniaControl->settingManager->getSetting($this, self::SETTING_LEAVE_JOIN_MESSAGES)) { | ||||
| 		if (!$this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES)) { | ||||
| 			return; | ||||
| 		} | ||||
| 		$string = array(0 => 'New Player', 1 => '$0f0Operator', 2 => '$0f0Admin', 3 => '$0f0MasterAdmin', 4 => '$0f0MasterAdmin'); | ||||
| @@ -131,10 +133,11 @@ class PlayerManager implements CallbackListener { | ||||
| 		$login = $callback[1][0]; | ||||
| 		$player = $this->removePlayer($login); | ||||
| 		 | ||||
| 		if ($this->maniaControl->settingManager->getSetting($this, "Leave Join Messages")) { | ||||
| 			$played = TimeFormatter::formatTime(time() - $player->joinTime); | ||||
| 			$this->maniaControl->chat->sendChat($player->nickname . '$z $ff0has left the game. Played:$fff ' . $played); | ||||
| 		if (!$this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES)) { | ||||
| 			return; | ||||
| 		} | ||||
| 		$played = Formatter::formatTimeH(time() - $player->joinTime); | ||||
| 		$this->maniaControl->chat->sendChat('$<'.$player->nickname . '$> $ff0has left the game. Played:$fff ' . $played); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|   | ||||
| @@ -27,6 +27,15 @@ abstract class Plugin { | ||||
| 	 */ | ||||
| 	public abstract function __construct(ManiaControl $maniaControl); | ||||
|  | ||||
| 	/** | ||||
| 	 * Get class name as string | ||||
| 	 *  | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public static function getClass() { | ||||
| 		return __CLASS__; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get plugin author | ||||
| 	 * | ||||
|   | ||||
| @@ -25,7 +25,7 @@ class PluginManager { | ||||
| 	private $pluginClasses = array(); | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct plugin handler | ||||
| 	 * Construct plugin manager | ||||
| 	 * | ||||
| 	 * @param \ManiaControl\ManiaControl $maniaControl        	 | ||||
| 	 */ | ||||
| @@ -121,6 +121,7 @@ class PluginManager { | ||||
| 		if ($pluginStatement->num_rows <= 0) { | ||||
| 			$pluginStatement->free_result(); | ||||
| 			$pluginStatement->close(); | ||||
| 			$this->savePluginStatus($className, false); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$pluginStatement->bind_result($activeInt); | ||||
| @@ -149,7 +150,7 @@ class PluginManager { | ||||
| 			$classesAfter = get_declared_classes(); | ||||
| 			$newClasses = array_diff($classesAfter, $classesBefore); | ||||
| 			foreach ($newClasses as $className) { | ||||
| 				if (!is_subclass_of($className, 'ManiaControl\Plugin')) { | ||||
| 				if (!is_subclass_of($className, Plugin::getClass())) { | ||||
| 					continue; | ||||
| 				} | ||||
| 				array_push($this->pluginClasses, $className); | ||||
|   | ||||
| @@ -164,6 +164,9 @@ class SettingManager { | ||||
| 		if ($type === self::TYPE_ARRAY) { | ||||
| 			return implode($this->arrayDelimiter, $value); | ||||
| 		} | ||||
| 		if ($type === self::TYPE_BOOL) { | ||||
| 			return ($value ? 1 : 0); | ||||
| 		} | ||||
| 		return $value; | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| namespace ManiaControl; | ||||
|  | ||||
| use ManiaControl\Players\Player; | ||||
| use ManiaControl\Players\PlayerManager; | ||||
|  | ||||
| /** | ||||
|  * Class handling authentication levels | ||||
| @@ -101,7 +102,7 @@ class Authentication { | ||||
| 			return false; | ||||
| 		} | ||||
| 		$mysqli = $this->maniaControl->database->mysqli; | ||||
| 		$authQuery = "INSERT INTO `" . PlayerHandler::TABLE_PLAYERS . "` ( | ||||
| 		$authQuery = "INSERT INTO `" . PlayerManager::TABLE_PLAYERS . "` ( | ||||
| 				`login`, | ||||
| 				`authLevel` | ||||
| 				) VALUES ( | ||||
|   | ||||
							
								
								
									
										239
									
								
								application/plugins/DonationPlugin.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										239
									
								
								application/plugins/DonationPlugin.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,239 @@ | ||||
| <?php | ||||
| use ManiaControl\Authentication; | ||||
| use ManiaControl\ManiaControl; | ||||
| use ManiaControl\Callbacks\CallbackListener; | ||||
| use ManiaControl\Callbacks\CallbackManager; | ||||
| use ManiaControl\Commands\CommandListener; | ||||
| use ManiaControl\Plugins\Plugin; | ||||
| use ManiaControl\Players\Player; | ||||
|  | ||||
| /** | ||||
|  * Donation plugin | ||||
|  * | ||||
|  * @author steeffeen | ||||
|  */ | ||||
| class DonationPlugin extends Plugin implements CallbackListener, CommandListener { | ||||
| 	/** | ||||
| 	 * Constants | ||||
| 	 */ | ||||
| 	const VERSION = '1.0'; | ||||
| 	const SETTING_ANNOUNCE_SERVERDONATION = 'Enable Server-Donation Announcements'; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Private properties | ||||
| 	 */ | ||||
| 	private $openBills = array(); | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct donation plugin | ||||
| 	 * | ||||
| 	 * @param \ManiaControl\ManiaControl $maniaControl        	 | ||||
| 	 */ | ||||
| 	public function __construct(ManiaControl $maniaControl) { | ||||
| 		$this->maniaControl = $maniaControl; | ||||
| 		 | ||||
| 		$this->author = 'steeffeen'; | ||||
| 		$this->name = 'Donation Plugin'; | ||||
| 		$this->version = self::VERSION; | ||||
| 		$this->description = 'DonationPlugin commands like /donate, /pay and /getplanets and a donation widget.'; | ||||
| 		 | ||||
| 		$this->maniaControl->commandManager->registerCommandListener('donate', $this, 'command_Donate'); | ||||
| 		$this->maniaControl->commandManager->registerCommandListener('pay', $this, 'command_Pay'); | ||||
| 		$this->maniaControl->commandManager->registerCommandListener('getplanets', $this, 'command_GetPlanets'); | ||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_BILLUPDATED, $this, 'handleBillUpdated'); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle /donate command | ||||
| 	 * | ||||
| 	 * @param array $chatCallback        	 | ||||
| 	 * @param Player $player        	 | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	public function command_Donate(array $chatCallback, Player $player) { | ||||
| 		$text = $chatCallback[1][2]; | ||||
| 		$params = explode(' ', $text); | ||||
| 		if (count($params) < 2) { | ||||
| 			$this->sendDonateUsageExample($player); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$amount = (int) $params[1]; | ||||
| 		if (!$amount || $amount <= 0) { | ||||
| 			$this->sendDonateUsageExample($player); | ||||
| 			return false; | ||||
| 		} | ||||
| 		if (count($params) >= 3) { | ||||
| 			$receiver = $params[2]; | ||||
| 			$receiverPlayer = $this->maniaControl->playerManager->getPlayer($receiver); | ||||
| 			$receiverName = ($receiverPlayer ? $receiverPlayer['NickName'] : $receiver); | ||||
| 		} | ||||
| 		else { | ||||
| 			$receiver = ''; | ||||
| 			$receiverName = $this->maniaControl->server->getName(); | ||||
| 		} | ||||
| 		$message = 'Donate ' . $amount . ' Planets to $<' . $receiverName . '$>?'; | ||||
| 		if (!$this->maniaControl->client->query('SendBill', $player->login, $amount, $message, $receiver)) { | ||||
| 			trigger_error( | ||||
| 					"Couldn't create donation of {$amount} planets from '{$player->login}' for '{$receiver}'. " . | ||||
| 							 $this->maniaControl->getClientErrorText()); | ||||
| 			$this->maniaControl->chat->sendError("Creating donation failed.", $player->login); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$bill = $this->maniaControl->client->getResponse(); | ||||
| 		$this->openBills[$bill] = array(true, $player->login, $receiver, $amount, time()); | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle /pay command | ||||
| 	 * | ||||
| 	 * @param array $chatCallback        	 | ||||
| 	 * @param Player $player        	 | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	public function command_Pay(array $chatCallback, Player $player) { | ||||
| 		if (!$this->maniaControl->authentication->checkRight($player, Authentication::AUTH_LEVEL_SUPERADMIN)) { | ||||
| 			$this->maniaControl->authentication->sendNotAllowed($player); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$text = $chatCallback[1][2]; | ||||
| 		$params = explode(' ', $text); | ||||
| 		if (count($params) < 2) { | ||||
| 			$this->sendPayUsageExample($player); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$amount = (int) $params[1]; | ||||
| 		if (!$amount || $amount <= 0) { | ||||
| 			$this->sendPayUsageExample($player); | ||||
| 			return false; | ||||
| 		} | ||||
| 		if (count($params) >= 3) { | ||||
| 			$receiver = $params[2]; | ||||
| 		} | ||||
| 		else { | ||||
| 			$receiver = $player->login; | ||||
| 		} | ||||
| 		$message = 'Payout from $<' . $this->maniaControl->server->getName() . '$>.'; | ||||
| 		if (!$this->maniaControl->client->query('Pay', $receiver, $amount, $message)) { | ||||
| 			trigger_error( | ||||
| 					"Couldn't create payout of {$amount} planets by '{$player->login}' for '{$receiver}'. " . | ||||
| 							 $this->maniaControl->getClientErrorText()); | ||||
| 			$this->maniaControl->chat->sendError("Creating payout failed.", $player->login); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$bill = $this->maniaControl->client->getResponse(); | ||||
| 		$this->openBills[$bill] = array(false, $player->login, $receiver, $amount, time()); | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle /getplanets command | ||||
| 	 * | ||||
| 	 * @param array $chat        	 | ||||
| 	 * @param Player $player        	 | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	public function command_GetPlanets(array $chatCallback, Player $player) { | ||||
| 		if (!$this->maniaControl->authentication->checkRight($player, Authentication::AUTH_LEVEL_ADMIN)) { | ||||
| 			$this->maniaControl->authentication->sendNotAllowed($player); | ||||
| 			return false; | ||||
| 		} | ||||
| 		if (!$this->maniaControl->client->query('GetServerPlanets')) { | ||||
| 			trigger_error("Couldn't retrieve server planets. " . $this->maniaControl->getClientErrorText()); | ||||
| 			return false; | ||||
| 		} | ||||
| 		$planets = $this->maniaControl->client->getResponse(); | ||||
| 		$message = "This Server has {$planets} Planets!"; | ||||
| 		return $this->maniaControl->chat->sendInformation($message, $player->login); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle bill updated callback | ||||
| 	 * | ||||
| 	 * @param array $callback        	 | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	public function handleBillUpdated(array $callback) { | ||||
| 		$billId = $callback[1][0]; | ||||
| 		if (!array_key_exists($billId, $this->openBills)) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		$billData = $this->openBills[$billId]; | ||||
| 		$login = $billData[1]; | ||||
| 		$receiver = $billData[2]; | ||||
| 		switch ($callback[1][1]) { | ||||
| 			case 4: | ||||
| 				{ | ||||
| 					// Payed | ||||
| 					$donation = $billData[0]; | ||||
| 					$amount = $billData[3]; | ||||
| 					if ($donation) { | ||||
| 						// Donation | ||||
| 						if (strlen($receiver) > 0) { | ||||
| 							// To player | ||||
| 							$message = "Successfully donated {$amount} to '{$receiver}'!"; | ||||
| 							$this->maniaControl->chat->sendSuccess($message, $login); | ||||
| 						} | ||||
| 						else { | ||||
| 							// To server | ||||
| 							if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_ANNOUNCE_SERVERDONATION, true)) { | ||||
| 								$player = $this->maniaControl->playerManager->getPlayer($login); | ||||
| 								$message = '$<' . ($player ? $player->nickname : $login) . '$> donated ' . $amount . ' Planets! Thanks.'; | ||||
| 							} | ||||
| 							else { | ||||
| 								$message = 'Donation successful! Thanks.'; | ||||
| 							} | ||||
| 							$this->maniaControl->chat->sendSuccess($message, $login); | ||||
| 						} | ||||
| 					} | ||||
| 					else { | ||||
| 						// Payout | ||||
| 						$message = "Successfully payed out {$amount} to '{$receiver}'!"; | ||||
| 						$this->maniaControl->chat->sendSuccess($message, $login); | ||||
| 					} | ||||
| 					unset($this->openBills[$billId]); | ||||
| 					break; | ||||
| 				} | ||||
| 			case 5: | ||||
| 				{ | ||||
| 					// Refused | ||||
| 					$message = 'Transaction cancelled.'; | ||||
| 					$this->maniaControl->chat->sendError($message, $login); | ||||
| 					unset($this->openBills[$billId]); | ||||
| 					break; | ||||
| 				} | ||||
| 			case 6: | ||||
| 				{ | ||||
| 					// Error | ||||
| 					$this->maniaControl->chat->sendError($callback[1][2], $login); | ||||
| 					unset($this->openBills[$billId]); | ||||
| 					break; | ||||
| 				} | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Send an usage example for /donate to the player | ||||
| 	 * | ||||
| 	 * @param Player $player        	 | ||||
| 	 * @return boolean | ||||
| 	 */ | ||||
| 	private function sendDonateUsageExample(Player $player) { | ||||
| 		$colorCode = '$f80'; | ||||
| 		return $this->maniaControl->chat->sendChat("{$colorCode}Usage Example: '/donate 100'", $player->login); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Send an usage example for /pay to the player | ||||
| 	 * | ||||
| 	 * @param Player $player        	 | ||||
| 	 * @return boolean | ||||
| 	 */ | ||||
| 	private function sendPayUsageExample(Player $player) { | ||||
| 		$colorCode = '$f80'; | ||||
| 		return $this->maniaControl->chat->sendChat("{$colorCode}Usage Example: '/pay 100 login'", $player->login); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
		Reference in New Issue
	
	Block a user