817 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			817 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| use FML\Controls\Control;
 | |
| use FML\Controls\Frame;
 | |
| use FML\Controls\Labels\Label_Button;
 | |
| use FML\Controls\Labels\Label_Text;
 | |
| use FML\Controls\Quad;
 | |
| use FML\ManiaLink;
 | |
| use ManiaControl\Admin\ActionsMenu;
 | |
| use ManiaControl\Callbacks\CallbackListener;
 | |
| use ManiaControl\Callbacks\CallbackManager;
 | |
| use ManiaControl\ManiaControl;
 | |
| use ManiaControl\Manialinks\ManialinkPageAnswerListener;
 | |
| use ManiaControl\Players\Player;
 | |
| use ManiaControl\Players\PlayerManager;
 | |
| use ManiaControl\Plugins\Plugin;
 | |
| use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
 | |
| 
 | |
| class SlotMachinePlugin implements Plugin, CallbackListener, ManialinkPageAnswerListener {
 | |
| 	/**
 | |
| 	 * Constants
 | |
| 	 */
 | |
| 	const PLUGIN_ID             = 50;
 | |
| 	const PLUGIN_VERSION        = 0.1;
 | |
| 	const PLUGIN_NAME           = 'SlotMachine';
 | |
| 	const PLUGIN_AUTHOR         = 'kremsy';
 | |
| 	const SLOT_MAIN_ML          = 'SlotMachine.ManiaLinkId';
 | |
| 	const SLOT_ICON_ML          = 'SlotMachine.IconId';
 | |
| 	const TABLE_SLOTMACHINE     = 'mc_slotmachine';
 | |
| 	const TABLE_SLOTMACHINEWINS = 'mc_slotmachinewins';
 | |
| 	const ACTION_PLAY           = 'SlotmachinePlugin.Play';
 | |
| 	const ACTION_DEPOSIT        = 'SlotmachinePlugin.Deposit';
 | |
| 	const ACTION_CASHOUT        = 'SlotmachinePlugin.Cashout';
 | |
| 	const ACTION_TOGGLE         = 'SlotmachinePlugin.Toggle';
 | |
| 	const COST_OF_PLAY          = 3;
 | |
| 	const DEPOSIT_AMOUNT        = 250;
 | |
| 	const STAT_SLOT_PLAY        = 'Slotmachine Plays';
 | |
| 	const STAT_SLOT_WON         = 'Slotmachine Won';
 | |
| 	const MAX_CLICKS_PER_SEC    = 5;
 | |
| 
 | |
| 	//Icons
 | |
| 	const ICON_LINK           = 'http://pictures.esc-clan.net/mpaseco/slot/';
 | |
| 	const ICON_LEMON          = 'symbols/lemon.png';
 | |
| 	const ICON_ORANGE         = 'symbols/orange.png';
 | |
| 	const ICON_MELONE         = 'symbols/melone.png';
 | |
| 	const ICON_PLUM           = 'symbols/plum.png';
 | |
| 	const ICON_CHERRY         = 'symbols/cherry.png';
 | |
| 	const ICON_BAR            = 'symbols/bar.png';
 | |
| 	const ICON_BLANK          = 'symbols/blank1.png';
 | |
| 	const ICON_BUTTON_BLUE_50 = 'buttons/news/blue3.png';
 | |
| 	const ICON_BUTTON_BLUE_51 = 'buttons/gbook/blue.png';
 | |
| 	const ICON_BUTTON_BLUE_52 = 'buttons/download/blue.png';
 | |
| 	const ICON_BUTTON_TITLE   = 'buttons/title/titel4.png';
 | |
| 
 | |
| 	/**
 | |
| 	 * Private properties
 | |
| 	 */
 | |
| 	/** @var maniaControl $maniaControl * */
 | |
| 	private $maniaControl = null;
 | |
| 	private $playerSettings = array();
 | |
| 	private $symbolArrayA = array();
 | |
| 	private $symbolArrayB = array();
 | |
| 	private $symbolArrayC = array();
 | |
| 	private $bills = array();
 | |
| 
 | |
| 	/**
 | |
| 	 * Prepares the Plugin
 | |
| 	 *
 | |
| 	 * @param ManiaControl $maniaControl
 | |
| 	 * @return mixed
 | |
| 	 */
 | |
| 	public static function prepare(ManiaControl $maniaControl) {
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_CHERRY, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_MELONE, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_ORANGE, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_PLUM, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_LEMON, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_BAR, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_BLANK, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_BUTTON_BLUE_50, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_BUTTON_BLUE_51, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_BUTTON_BLUE_52, self::ICON_LINK);
 | |
| 		$maniaControl->manialinkManager->iconManager->addIcon(self::ICON_BUTTON_TITLE, self::ICON_LINK);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Load the plugin
 | |
| 	 *
 | |
| 	 * @param \ManiaControl\ManiaControl $maniaControl
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	public function load(ManiaControl $maniaControl) {
 | |
| 		$this->maniaControl = $maniaControl;
 | |
| 
 | |
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_BILLUPDATED, $this, 'handleBillUpdated');
 | |
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MC_1_SECOND, $this, 'onEverySecond');
 | |
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MC_1_MINUTE, $this, 'updateDatabaseEveryMinute');
 | |
| 		$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERJOINED, $this, 'handlePlayerConnect');
 | |
| 		$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECTED, $this, 'handlePlayerDisconnect');
 | |
| 
 | |
| 		$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_PLAY, $this, 'actionPlay');
 | |
| 		$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_DEPOSIT, $this, 'actionDeposit');
 | |
| 		$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_CASHOUT, $this, 'actionCashout');
 | |
| 		$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_TOGGLE, $this, 'actionToggle');
 | |
| 
 | |
| 		// Define player stats
 | |
| 		$this->maniaControl->statisticManager->defineStatMetaData(self::STAT_SLOT_PLAY);
 | |
| 		$this->maniaControl->statisticManager->defineStatMetaData(self::STAT_SLOT_WON);
 | |
| 
 | |
| 		$this->initializeArray();
 | |
| 
 | |
| 		$this->checkDatabase();
 | |
| 		$this->displayIcon();
 | |
| 
 | |
| 		foreach($this->maniaControl->playerManager->getPlayers() as $player) {
 | |
| 			$this->playerSettings[$player->index] = array("Balance" => $this->getBalance($player->index), "Won" => 0, "Spent" => 0, "Plays" => 0, "ClicksLastSecond" => 0, "Visible" => 0);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public function actionToggle(array $chatCallback, Player $player) {
 | |
| 		$pic1 = $this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_BAR);
 | |
| 		$pic2 = $this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_MELONE);
 | |
| 		$pic3 = $this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_PLUM);
 | |
| 
 | |
| 		if (isset($this->playerSettings[$player->index]) && $this->playerSettings[$player->index]['Visible'] == 1) {
 | |
| 			$this->playerSettings[$player->index]["Visible"] = 0;
 | |
| 			$this->maniaControl->manialinkManager->closeWidget($player, self::SLOT_MAIN_ML);
 | |
| 		} else {
 | |
| 			if (!isset($this->playerSettings[$player->index])) {
 | |
| 				$this->playerSettings[$player->index] = array("Balance" => $this->getBalance($player->index), "Won" => 0, "Spent" => 0, "Plays" => 0, "ClicksLastSecond" => 0, "Visible" => 1);
 | |
| 			} else {
 | |
| 				$this->playerSettings[$player->index]["Visible"] = 1;
 | |
| 			}
 | |
| 			$this->insertPlayerIntoDatabase($player->index);
 | |
| 			$this->showSlotMachine($player, $pic1, $pic2, $pic3);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *Handle on Every Second
 | |
| 	 */
 | |
| 	public function onEverySecond() {
 | |
| 		if (isset($this->playerSettings)) {
 | |
| 			foreach($this->playerSettings as $key => $player) {
 | |
| 				$this->playerSettings[$key]["ClicksLastSecond"] = 0; //Set Klick count to 0 on every player
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Handle Player connect
 | |
| 	 *
 | |
| 	 * @param array $callback
 | |
| 	 */
 | |
| 	public function handlePlayerConnect(array $callback) {
 | |
| 		$player = $callback[1];
 | |
| 		/** @var Player $player */
 | |
| 		$this->displayIcon($player->login);
 | |
| 		//Initialize Player
 | |
| 		$this->playerSettings[$player->index] = array("Balance" => $this->getBalance($player->index), "Won" => 0, "Spent" => 0, "Plays" => 0, "ClicksLastSecond" => 0, "Visible" => 0);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Handle Player disconnect
 | |
| 	 *
 | |
| 	 * @param array  $chatCallback
 | |
| 	 * @param Player $player
 | |
| 	 */
 | |
| 	public function handlePlayerDisconnect(array $callback) {
 | |
| 		$this->updateDatabaseEveryMinute();
 | |
| 		$player = $callback[1];
 | |
| 		unset($this->playerSettings[$player->index]);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	public function actionPlay(array $chatCallback, Player $player) {
 | |
| 		if ($this->playerSettings[$player->index]["Balance"] >= self::COST_OF_PLAY) {
 | |
| 			if ($this->playerSettings[$player->index]["ClicksLastSecond"] > self::MAX_CLICKS_PER_SEC) {
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			$randA = rand(0, 63);
 | |
| 			$randB = rand(0, 63);
 | |
| 			$randC = rand(0, 63);
 | |
| 
 | |
| 			$symbolA = $this->getSymbolNumber(1, $randA);
 | |
| 			$symbolB = $this->getSymbolNumber(2, $randB);
 | |
| 			$symbolC = $this->getSymbolNumber(3, $randC);
 | |
| 
 | |
| 			$picA = $this->getIconLink($symbolA);
 | |
| 			$picB = $this->getIconLink($symbolB);
 | |
| 			$picC = $this->getIconLink($symbolC);
 | |
| 
 | |
| 			$won = $this->checkWin($symbolA, $symbolB, $symbolC);
 | |
| 
 | |
| 			$this->playerSettings[$player->index]["Balance"] += $won - self::COST_OF_PLAY;
 | |
| 			$this->playerSettings[$player->index]["Won"] += $won;
 | |
| 			$this->playerSettings[$player->index]["Spent"] += self::COST_OF_PLAY;
 | |
| 			$this->playerSettings[$player->index]["Plays"]++;
 | |
| 			$this->playerSettings[$player->index]["ClicksLastSecond"]++;
 | |
| 
 | |
| 			$this->showSlotMachine($player, $picA, $picB, $picC, $won);
 | |
| 
 | |
| 			if ($won >= self::COST_OF_PLAY * 20) {
 | |
| 				$mysqli = $this->maniaControl->database->mysqli;
 | |
| 				$query  = 'INSERT INTO ' . self::TABLE_SLOTMACHINEWINS . '
 | |
|              		 (PlayerIndex,Won) VALUES(' . $player->index . ',' . $won . ')';
 | |
| 				$mysqli->query($query);
 | |
| 
 | |
| 				$message = '$FF0Player $FFF$<' . $player->nickname . '$> $FF0just won $FFF' . $won . ' $FF0Planets in the slotmachine!';
 | |
| 				$this->maniaControl->chat->sendChat($message);
 | |
| 			}
 | |
| 		} else {
 | |
| 			$arr = array();
 | |
| 			$this->actionDeposit($arr, $player);
 | |
| 		}
 | |
| 
 | |
| 		$this->updateDatabaseEveryMinute();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Play the slotmachine
 | |
| 	 *
 | |
| 	 * @param Player $player
 | |
| 	 * @param        $pic1
 | |
| 	 * @param        $pic2
 | |
| 	 * @param        $pic3
 | |
| 	 * @param int    $lastWin
 | |
| 	 */
 | |
| 	private function showSlotMachine(Player $player, $pic1, $pic2, $pic3, $lastWin = 0, $showSelf = true) {
 | |
| 
 | |
| 		/*$pos_x        = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_POSX);
 | |
| 		$pos_y        = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_POSY);
 | |
| 		$width        = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_WIDTH);
 | |
| 		$height       = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_HEIGHT);*/
 | |
| 		$posX   = 160 - 16;
 | |
| 		$posY   = 3.6;
 | |
| 		$width  = 32;
 | |
| 		$height = 50;
 | |
| 
 | |
| 		$quadStyle    = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowStyle();
 | |
| 		$quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowSubStyle();
 | |
| 
 | |
| 
 | |
| 		//$script    = new Script();
 | |
| 		//$maniaLink->setScript($script);
 | |
| 
 | |
| 		// mainframe
 | |
| 		$frame = new Frame();
 | |
| 
 | |
| 		$frame->setSize($width, $height);
 | |
| 		$frame->setPosition($posX, $posY);
 | |
| 
 | |
| 		if ($showSelf) {
 | |
| 			$maniaLink = new ManiaLink(self::SLOT_MAIN_ML);
 | |
| 			$maniaLink->add($frame);
 | |
| 		}
 | |
| 
 | |
| 		// Background Quad
 | |
| 		$backgroundQuad = new Quad();
 | |
| 		$frame->add($backgroundQuad);
 | |
| 		$backgroundQuad->setSize($width, $height);
 | |
| 		$backgroundQuad->setStyles($quadStyle, $quadSubstyle);
 | |
| 
 | |
| 		$headBgQuad = new Quad();
 | |
| 		$headBgQuad->setY($height / 2 - 2);
 | |
| 		$frame->add($headBgQuad);
 | |
| 		$headBgQuad->setSize($width, 4);
 | |
| 		$headBgQuad->setStyles($quadStyle, $quadSubstyle);
 | |
| 
 | |
| 		$headQuad = new Quad();
 | |
| 		$headQuad->setY($height / 2 - 2);
 | |
| 		$headQuad->setZ(-0.3);
 | |
| 		$frame->add($headQuad);
 | |
| 		$headQuad->setImage($this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_BUTTON_TITLE));
 | |
| 		$headQuad->setSize($width, 4);
 | |
| 
 | |
| 		//Balance Label
 | |
| 		$balance = $this->playerSettings[$player->index]["Balance"];
 | |
| 		$label   = new Label_Text();
 | |
| 		$frame->add($label);
 | |
| 		$label->setText("Balance: " . $balance);
 | |
| 		$label->setTextColor("FFF");
 | |
| 		$label->setX(-$width / 2 + 3);
 | |
| 		$label->setY($height / 2 - 7);
 | |
| 		$label->setHAlign(Control::LEFT);
 | |
| 		$label->setTextSize(1.1);
 | |
| 
 | |
| 		//Icons
 | |
| 		$quad = new Quad();
 | |
| 		$frame->add($quad);
 | |
| 		$quad->setPosition(-$width / 2 + 6, $height / 2 - 15, 2);
 | |
| 		$quad->setSize(12, 10);
 | |
| 		$quad->setImage($pic1);
 | |
| 
 | |
| 		$quad = clone $quad;
 | |
| 		$frame->add($quad);
 | |
| 		$quad->setX(0);
 | |
| 		$quad->setImage($pic2);
 | |
| 
 | |
| 		$quad = clone $quad;
 | |
| 		$frame->add($quad);
 | |
| 		$quad->setX($width / 2 - 6);
 | |
| 		$quad->setImage($pic3);
 | |
| 
 | |
| 		//Won Label
 | |
| 		if ($lastWin > 0) {
 | |
| 			$label = new Label_Text();
 | |
| 			$frame->add($label);
 | |
| 			$label->setSize(20, 3);
 | |
| 			$label->setTextSize(1);
 | |
| 			$label->setPosition(-$width / 2 + 3, $height / 2 - 22, 2);
 | |
| 			$label->setText("Won Planets: " . $lastWin);
 | |
| 			$label->setTextColor("FFF");
 | |
| 			$label->setHAlign(Control::LEFT);
 | |
| 		}
 | |
| 
 | |
| 		//Buttons
 | |
| 		$quad = new Quad();
 | |
| 		$frame->add($quad);
 | |
| 		$quad->setY($height / 2 - 28);
 | |
| 		$quad->setZ(-0.3);
 | |
| 		$quad->setImage($this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_BUTTON_BLUE_50));
 | |
| 		$quad->setSize($width - 5, 7);
 | |
| 		$quad->setAction(self::ACTION_PLAY);
 | |
| 
 | |
| 		$quad = clone $quad;
 | |
| 		$frame->add($quad);
 | |
| 		$quad->setY($height / 2 - 36);
 | |
| 		$quad->setImage($this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_BUTTON_BLUE_51));
 | |
| 		$quad->setAction(self::ACTION_DEPOSIT);
 | |
| 
 | |
| 		$quad = clone $quad;
 | |
| 		$frame->add($quad);
 | |
| 		$quad->setY($height / 2 - 44);
 | |
| 		$quad->setImage($this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_BUTTON_BLUE_52));
 | |
| 		$quad->setAction(self::ACTION_CASHOUT);
 | |
| 
 | |
| 		$label = new Label_Button();
 | |
| 		$frame->add($label);
 | |
| 		$label->setStyle("TextButtonBig");
 | |
| 		$label->setText("$0f9Play");
 | |
| 		$label->setY($height / 2 - 29);
 | |
| 		$label->setZ(-0.3);
 | |
| 		$label->setSize($width - 5, 7);
 | |
| 		$label->setAction(self::ACTION_PLAY);
 | |
| 		$label->setTextSize(1);
 | |
| 
 | |
| 		$label = clone $label;
 | |
| 		$frame->add($label);
 | |
| 		$label->setY($height / 2 - 37);
 | |
| 		$label->setText("$0f9Deposit");
 | |
| 		$label->setAction(self::ACTION_DEPOSIT);
 | |
| 
 | |
| 		$label = clone $label;
 | |
| 		$frame->add($label);
 | |
| 		$label->setY($height / 2 - 44.4);
 | |
| 		$label->setText("$0F9Cash Out");
 | |
| 		$label->setAction(self::ACTION_CASHOUT);
 | |
| 
 | |
| 		// Send manialink
 | |
| 		if ($showSelf) {
 | |
| 			$manialinkText = $maniaLink->render()->saveXML();
 | |
| 			$this->maniaControl->manialinkManager->sendManialink($manialinkText, $player->login);
 | |
| 		} else {
 | |
| 			return $frame;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Displays the Icon
 | |
| 	 *
 | |
| 	 * @param bool $login
 | |
| 	 */
 | |
| 	public function displayIcon($login = false) {
 | |
| 		$posX              = $this->maniaControl->settingManager->getSetting($this->maniaControl->actionsMenu, ActionsMenu::SETTING_MENU_POSX);
 | |
| 		$posY              = $this->maniaControl->settingManager->getSetting($this->maniaControl->actionsMenu, ActionsMenu::SETTING_MENU_POSY);
 | |
| 		$width             = $this->maniaControl->settingManager->getSetting($this->maniaControl->actionsMenu, ActionsMenu::SETTING_MENU_ITEMSIZE);
 | |
| 		$height            = $this->maniaControl->settingManager->getSetting($this->maniaControl->actionsMenu, ActionsMenu::SETTING_MENU_ITEMSIZE);
 | |
| 		$shootManiaOffset  = $this->maniaControl->manialinkManager->styleManager->getDefaultIconOffsetSM();
 | |
| 		$quadStyle         = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadStyle();
 | |
| 		$quadSubstyle      = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadSubstyle();
 | |
| 		$itemMarginFactorX = 1.3;
 | |
| 		$itemMarginFactorY = 1.2;
 | |
| 		$posY += $width * $itemMarginFactorY;
 | |
| 
 | |
| 		// Get Title Id
 | |
| 		$titleId     = $this->maniaControl->server->titleId;
 | |
| 		$titlePrefix = strtoupper(substr($titleId, 0, 2));
 | |
| 
 | |
| 		//If game is shootmania lower the icons position by 20
 | |
| 		if ($titlePrefix == 'SM') {
 | |
| 			$posY -= $shootManiaOffset;
 | |
| 		}
 | |
| 
 | |
| 		$itemSize = $width;
 | |
| 
 | |
| 		$maniaLink = new ManiaLink(self::SLOT_ICON_ML);
 | |
| 
 | |
| 		// Donate Menu Icon Frame
 | |
| 		$frame = new Frame();
 | |
| 		$maniaLink->add($frame);
 | |
| 		$frame->setPosition($posX, $posY);
 | |
| 
 | |
| 		$backgroundQuad = new Quad();
 | |
| 		$frame->add($backgroundQuad);
 | |
| 		$backgroundQuad->setSize($width * $itemMarginFactorX, $height * $itemMarginFactorY);
 | |
| 		$backgroundQuad->setStyles($quadStyle, $quadSubstyle);
 | |
| 
 | |
| 		$iconFrame = new Frame();
 | |
| 		$frame->add($iconFrame);
 | |
| 
 | |
| 		$iconFrame->setSize($itemSize, $itemSize);
 | |
| 		$itemQuad = new Quad();
 | |
| 		$itemQuad->setImage($this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_CHERRY));
 | |
| 		$itemQuad->setSize($itemSize, $itemSize);
 | |
| 		$iconFrame->add($itemQuad);
 | |
| 
 | |
| 		$itemQuad->setAction(self::ACTION_TOGGLE);
 | |
| 
 | |
| 
 | |
| 		// Send manialink
 | |
| 		$manialinkText = $maniaLink->render()->saveXML();
 | |
| 		$this->maniaControl->manialinkManager->sendManialink($manialinkText, $login);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Handles a deposit
 | |
| 	 *
 | |
| 	 * @param array  $chatCallback
 | |
| 	 * @param Player $player
 | |
| 	 */
 | |
| 	public function actionDeposit(array $chatCallback, Player $player) {
 | |
| 		$this->playerSettings[$player->index]["ClicksLastSecond"]++;
 | |
| 		if ($this->playerSettings[$player->index]["ClicksLastSecond"] > 1) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$planets = self::DEPOSIT_AMOUNT;
 | |
| 		$message = '$F0FDeposit $FFF' . $planets . ' Planets $F0Fin the slot-machine.';
 | |
| 
 | |
| 		$billId = $this->maniaControl->client->sendBill($player->login, (int)$planets, $message, '');
 | |
| 
 | |
| 		$this->bills[$billId] = array($player, $planets);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Handles a deposit
 | |
| 	 *
 | |
| 	 * @param array  $chatCallback
 | |
| 	 * @param Player $player
 | |
| 	 */
 | |
| 	public function actionCashout(array $chatCallback, Player $player) {
 | |
| 		$this->playerSettings[$player->index]["ClicksLastSecond"]++;
 | |
| 		if ($this->playerSettings[$player->index]["ClicksLastSecond"] > 1) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$balance = $this->playerSettings[$player->index]["Balance"];
 | |
| 
 | |
| 		if ($balance == 0) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$message = '$09c' . $balance . '$zPlanets have been re-credited to your ManiaPlanet account! Thank you for playing Slots! Your $i$s$08fparagon$n$000$m.$fffTeam';
 | |
| 
 | |
| 		try {
 | |
| 			$billId = $this->maniaControl->client->pay($player->login, (int)$balance, $message);
 | |
| 		} catch(Exception $e) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		$this->bills[$billId] = array($player, -$balance);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Update the database player values every minute
 | |
| 	 *
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	public function updateDatabaseEveryMinute() {
 | |
| 		$mysqli = $this->maniaControl->database->mysqli;
 | |
| 
 | |
| 		// Save map dataS
 | |
| 		$query     = "UPDATE `" . self::TABLE_SLOTMACHINE . "`
 | |
| 				SET `Balance` = ?, `Spent` = `Spent` + ?, `Won` = `Won` + ?, `Plays` = `Plays` + ?
 | |
| 				WHERE `PlayerIndex` = ?;";
 | |
| 		$statement = $mysqli->prepare($query);
 | |
| 		if ($mysqli->error) {
 | |
| 			trigger_error($mysqli->error);
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		foreach($this->playerSettings as $index => $player) {
 | |
| 			$statement->bind_param('ssssi', $player["Balance"], $player["Spent"], $player["Won"], $player["Plays"], $index);
 | |
| 			$statement->execute();
 | |
| 			if ($statement->error) {
 | |
| 				trigger_error($statement->error);
 | |
| 			}
 | |
| 
 | |
| 			$slotPlayer = $this->maniaControl->playerManager->getPlayerByIndex($index);
 | |
| 			$this->maniaControl->statisticManager->insertStat(self::STAT_SLOT_PLAY, $slotPlayer, $this->maniaControl->server->index, $player["Plays"]);
 | |
| 			$this->maniaControl->statisticManager->insertStat(self::STAT_SLOT_WON, $slotPlayer, $this->maniaControl->server->index, $player["Won"]);
 | |
| 
 | |
| 			$this->playerSettings[$index]["Spent"] = 0;
 | |
| 			$this->playerSettings[$index]["Won"]   = 0;
 | |
| 			$this->playerSettings[$index]["Plays"] = 0;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		$statement->close();
 | |
| 
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Handle The bills
 | |
| 	 *
 | |
| 	 * @param $billCallback
 | |
| 	 */
 | |
| 	public function handleBillUpdated($billCallback) {
 | |
| 		$bill   = $billCallback[1];
 | |
| 		$billid = $bill[0];
 | |
| 
 | |
| 
 | |
| 		// check for known bill ID
 | |
| 		if (array_key_exists($billid, $this->bills)) {
 | |
| 			// get bill info
 | |
| 			$player  = $this->bills[$billid][0];
 | |
| 			$planets = $this->bills[$billid][1];
 | |
| 
 | |
| 			$picA = $this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_BAR);
 | |
| 			$picB = $this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_MELONE);
 | |
| 			$picC = $this->maniaControl->manialinkManager->iconManager->getIcon(self::ICON_PLUM);
 | |
| 
 | |
| 			// check bill state
 | |
| 			switch($bill[1]) {
 | |
| 				case 4: // Payed (Paid)
 | |
| 					if ($planets > 0) { //Deposit  pos Planets Value
 | |
| 						/* DEPOSIT BALANCE */
 | |
| 
 | |
| 						$this->playerSettings[$player->index]["Balance"] += $planets;
 | |
| 
 | |
| 						$message = '$FF0You successfully deposited $FFF' . $planets . ' $FF0planets in your slots account! Have fun!';
 | |
| 						$this->maniaControl->chat->sendChat($message, $player->login);
 | |
| 
 | |
| 						$this->showSlotMachine($player, $picA, $picB, $picC);
 | |
| 						$this->updateDatabaseEveryMinute();
 | |
| 					} else { //Withdrawl  neg Planets Value
 | |
| 
 | |
| 						$this->playerSettings[$player->index]["Balance"] = 0;
 | |
| 
 | |
| 						$message = '$FFF' . abs($planets) . ' $FF0Planets have been re-credited to your Maniaplanet account!';
 | |
| 						$this->maniaControl->chat->sendChat($message, $player->login);
 | |
| 
 | |
| 						$this->updateDatabaseEveryMinute();
 | |
| 
 | |
| 						$this->showSlotMachine($player, $picA, $picB, $picC);
 | |
| 					}
 | |
| 					unset($this->bills[$billid]);
 | |
| 					break;
 | |
| 				case 5: // Refused
 | |
| 					$message = '$FF0> $f00$iTransaction refused!';
 | |
| 					$this->maniaControl->chat->sendChat($message, $player->login);
 | |
| 					unset($this->bills[$billid]);
 | |
| 					break;
 | |
| 				case 6: // Error
 | |
| 					$message = '$FF0> $f00$iTransaction failed: $FFF$i ' . $bill[2];
 | |
| 					$this->maniaControl->chat->sendChat($message, $player->login);
 | |
| 					unset($this->bills[$billid]);
 | |
| 					break;
 | |
| 				default: // CreatingTransaction/Issued/ValidatingPay(e)ment
 | |
| 					break;
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Gets the Current Slotmachine Balance of a player
 | |
| 	 *
 | |
| 	 * @param $playerIndex
 | |
| 	 * @return int
 | |
| 	 */
 | |
| 	private function getBalance($playerIndex) {
 | |
| 		$mysqli = $this->maniaControl->database->mysqli;
 | |
| 
 | |
| 		/* Get Player Balance */
 | |
| 		$query = 'SELECT Balance FROM ' . self::TABLE_SLOTMACHINE . ' WHERE PlayerIndex=' . $playerIndex;
 | |
| 		$res   = $mysqli->query($query);
 | |
| 
 | |
| 		if ($mysqli->affected_rows > 0) {
 | |
| 			$row     = $res->fetch_object();
 | |
| 			$balance = $row->Balance;
 | |
| 		} else {
 | |
| 			return 0;
 | |
| 		}
 | |
| 		$res->free_result();
 | |
| 
 | |
| 		return $balance;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Inserts a Player into the database if he is not existing
 | |
| 	 *
 | |
| 	 * @param $playerIndex
 | |
| 	 */
 | |
| 	private function insertPlayerIntoDatabase($playerIndex) {
 | |
| 		$mysqli = $this->maniaControl->database->mysqli;
 | |
| 		$query  = 'INSERT INTO ' . self::TABLE_SLOTMACHINE . ' (PlayerIndex) VALUES (' . $playerIndex . ')';
 | |
| 		$mysqli->query($query);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Creates the Database tables
 | |
| 	 */
 | |
| 	private function checkDatabase() {
 | |
| 		$mysqli = $this->maniaControl->database->mysqli;
 | |
| 
 | |
| 		$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SLOTMACHINE . "` (
 | |
| 		          `PlayerIndex` MEDIUMINT(9) NOT NULL DEFAULT 0,
 | |
|               		`Balance`  MEDIUMINT(9) NOT NULL DEFAULT 0,
 | |
|               		`Spent`  MEDIUMINT(9) NOT NULL DEFAULT 0,
 | |
|               		`Won`  MEDIUMINT(9) NOT NULL DEFAULT 0,
 | |
|               		`Plays`  MEDIUMINT(9) NOT NULL DEFAULT 0,
 | |
| 		           UNIQUE KEY `PlayerIndex` (`PlayerIndex`)
 | |
| 		         ) ENGINE=MyISAM";
 | |
| 		$mysqli->query($query);
 | |
| 
 | |
| 		$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SLOTMACHINEWINS . "` (
 | |
| 		          `PlayerIndex` mediumint(9) NOT NULL default 0,
 | |
|               `Won`  mediumint(9) NOT NULL default 0,
 | |
|               `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
 | |
| 		           KEY `PlayerIndex` (`PlayerIndex`)
 | |
| 		         ) ENGINE=MyISAM";
 | |
| 		$mysqli->query($query);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Gets the SymbolNumber
 | |
| 	 *
 | |
| 	 * @param $arr
 | |
| 	 * @param $rand
 | |
| 	 * @return null
 | |
| 	 */
 | |
| 	private function getSymbolNumber($arr, $rand) {
 | |
| 		switch($arr) {
 | |
| 			case 1:
 | |
| 				return $this->symbolArrayA[$rand];
 | |
| 			case 2:
 | |
| 				return $this->symbolArrayB[$rand];
 | |
| 			case 3:
 | |
| 				return $this->symbolArrayC[$rand];
 | |
| 			default:
 | |
| 				return null;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Initializes the Symbol Arrays
 | |
| 	 */
 | |
| 	private function initializeArray() {
 | |
| 		$this->symbolArrayA = array(0, 0, 0, 0, //4
 | |
| 			1, 1, 1, 1, 1, //5
 | |
| 			2, 2, 2, 2, 2, 2, //6
 | |
| 			3, 3, 3, 3, 3, 3, //6
 | |
| 			4, 4, 4, 4, 4, 4, 4, //7
 | |
| 			5, 5, 5, 5, 5, 5, 5, 5, //8
 | |
| 			6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 //28
 | |
| 		);
 | |
| 		$this->symbolArrayB = array( //0, 0, 0, //3
 | |
| 			0, 0, 1, 1, 1, 1, //4
 | |
| 			2, 2, 2, 2, //4
 | |
| 			3, 3, 3, 3, 3, //5
 | |
| 			4, 4, 4, 4, 4, //5
 | |
| 			5, 5, 5, 5, 5, 5, //6
 | |
| 			//6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 //37
 | |
| 			6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6);
 | |
| 		$this->symbolArrayC = array(0, //1
 | |
| 			1, 1, //2
 | |
| 			2, 2, 2, //3
 | |
| 			3, 3, 3, 3, //4
 | |
| 			4, 4, 4, 4, 4, 4, //6
 | |
| 			5, 5, 5, 5, 5, 5, //6
 | |
| 			6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 //42
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Gets the Icon link
 | |
| 	 *
 | |
| 	 * @param $symbolNumber
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	private function getIconLink($symbolNumber) {
 | |
| 		switch($symbolNumber) {
 | |
| 			case 0:
 | |
| 				$iconName = self::ICON_BAR;
 | |
| 				break;
 | |
| 			case 1:
 | |
| 				$iconName = self::ICON_CHERRY;
 | |
| 				break;
 | |
| 			case 2:
 | |
| 				$iconName = self::ICON_PLUM;
 | |
| 				break;
 | |
| 			case 3:
 | |
| 				$iconName = self::ICON_MELONE;
 | |
| 				break;
 | |
| 			case 4:
 | |
| 				$iconName = self::ICON_ORANGE;
 | |
| 				break;
 | |
| 			case 5:
 | |
| 				$iconName = self::ICON_LEMON;
 | |
| 				break;
 | |
| 			default:
 | |
| 				$iconName = self::ICON_BLANK;
 | |
| 		}
 | |
| 		return $this->maniaControl->manialinkManager->iconManager->getIcon($iconName);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Checks for a win
 | |
| 	 *
 | |
| 	 * @param     $symbol1
 | |
| 	 * @param     $symbol2
 | |
| 	 * @param     $symbol3
 | |
| 	 * @param int $buyin
 | |
| 	 * @return int
 | |
| 	 */
 | |
| 	private function checkWin($symbol1, $symbol2, $symbol3, $buyin = 3) {
 | |
| 		$prize = 0;
 | |
| 
 | |
| 		if ($symbol1 == 5 && $symbol2 == 5 && $symbol3 == 5) {
 | |
| 			$prize = $buyin * 25;
 | |
| 		} else if ($symbol1 == 4 && $symbol2 == 4 && $symbol3 == 4) {
 | |
| 			$prize = $buyin * 50;
 | |
| 		} else if ($symbol1 == 3 && $symbol2 == 3 && $symbol3 == 3) {
 | |
| 			$prize = $buyin * 100;
 | |
| 		} else if ($symbol1 == 2 && $symbol2 == 2 && $symbol3 == 2) {
 | |
| 			$prize = $buyin * 200;
 | |
| 		} else if ($symbol1 == 1 && $symbol2 == 1 && $symbol3 == 1) {
 | |
| 			$prize = $buyin * 1000;
 | |
| 		} else if ($symbol1 == 0 && $symbol2 == 0 && $symbol3 == 0) {
 | |
| 			$prize = $buyin * 5000;
 | |
| 		} else if ($symbol1 == 1 && $symbol2 == 1 || $symbol1 == 1 && $symbol3 == 1 || $symbol2 == 1 && $symbol3 == 1) {
 | |
| 			$prize = $buyin * 10;
 | |
| 		} else if ($symbol1 == 1 || $symbol2 == 1 || $symbol3 == 1) {
 | |
| 			$prize = $buyin * 2;
 | |
| 		}
 | |
| 		return $prize;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Unload the plugin and its resources
 | |
| 	 */
 | |
| 	public function unload() {
 | |
| 		$emptyManialink = new ManiaLink(self::SLOT_MAIN_ML);
 | |
| 		$manialinkText  = $emptyManialink->render()->saveXML();
 | |
| 		$this->maniaControl->manialinkManager->sendManialink($manialinkText);
 | |
| 
 | |
| 		$emptyManialink = new ManiaLink(self::SLOT_ICON_ML);
 | |
| 		$manialinkText  = $emptyManialink->render()->saveXML();
 | |
| 		$this->maniaControl->manialinkManager->sendManialink($manialinkText);
 | |
| 
 | |
| 		$this->maniaControl->callbackManager->unregisterCallbackListener($this);
 | |
| 		$this->maniaControl->manialinkManager->unregisterManialinkPageAnswerListener($this);
 | |
| 		unset($this->maniaControl);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get plugin id
 | |
| 	 *
 | |
| 	 * @return int
 | |
| 	 */
 | |
| 	public static function getId() {
 | |
| 		return self::PLUGIN_ID;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get Plugin Name
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public static function getName() {
 | |
| 		return self::PLUGIN_NAME;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get Plugin Version
 | |
| 	 *
 | |
| 	 * @return float,,
 | |
| 	 */
 | |
| 	public static function getVersion() {
 | |
| 		return self::PLUGIN_VERSION;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get Plugin Author
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public static function getAuthor() {
 | |
| 		return self::PLUGIN_AUTHOR;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get Plugin Description
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public static function getDescription() {
 | |
| 		return null;
 | |
| 	}
 | |
| } |