TrackManiaControl/application/plugins/SlotMachine.php
2014-05-01 17:35:24 +02:00

821 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\Callbacks\TimerListener;
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, TimerListener {
/**
* 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->timerManager->registerTimerListening($this, 'onEverySecond', 1000);
$this->maniaControl->timerManager->registerTimerListening($this, 'updateDatabaseEveryMinute', 1000 * 60);
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_BILLUPDATED, $this, 'handleBillUpdated');
$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect');
$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECT, $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) {
// TODO: handle errors like 'too few server planets' - throw other like connection errors
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);
$this->maniaControl->timerManager->unregisterTimerListenings($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;
}
}