Merge remote-tracking branch 'origin/master'
Conflicts: application/plugins/Donations.php
This commit is contained in:
commit
fa5752d9ce
213
.idea/codeStyleSettings.xml
generated
Normal file
213
.idea/codeStyleSettings.xml
generated
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectCodeStyleSettingsManager">
|
||||||
|
<option name="PER_PROJECT_SETTINGS">
|
||||||
|
<value>
|
||||||
|
<option name="OTHER_INDENT_OPTIONS">
|
||||||
|
<value>
|
||||||
|
<option name="INDENT_SIZE" value="4" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="8" />
|
||||||
|
<option name="TAB_SIZE" value="4" />
|
||||||
|
<option name="USE_TAB_CHARACTER" value="true" />
|
||||||
|
<option name="SMART_TABS" value="false" />
|
||||||
|
<option name="LABEL_INDENT_SIZE" value="0" />
|
||||||
|
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
|
||||||
|
<option name="USE_RELATIVE_INDENTS" value="false" />
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
<PHPCodeStyleSettings>
|
||||||
|
<option name="ALIGN_PHPDOC_PARAM_NAMES" value="true" />
|
||||||
|
<option name="ALIGN_PHPDOC_COMMENTS" value="true" />
|
||||||
|
<option name="ALIGN_ASSIGNMENTS" value="true" />
|
||||||
|
<option name="PHPDOC_BLANK_LINE_BEFORE_TAGS" value="true" />
|
||||||
|
<option name="PHPDOC_KEEP_BLANK_LINES" value="false" />
|
||||||
|
<option name="LOWER_CASE_BOOLEAN_CONST" value="true" />
|
||||||
|
<option name="LOWER_CASE_NULL_CONST" value="true" />
|
||||||
|
<option name="KEEP_RPAREN_AND_LBRACE_ON_ONE_LINE" value="true" />
|
||||||
|
</PHPCodeStyleSettings>
|
||||||
|
<XML>
|
||||||
|
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||||
|
</XML>
|
||||||
|
<codeStyleSettings language="HTML">
|
||||||
|
<indentOptions>
|
||||||
|
<option name="USE_TAB_CHARACTER" value="true" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="PHP">
|
||||||
|
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||||
|
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
|
||||||
|
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
|
||||||
|
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
|
||||||
|
<option name="BLANK_LINES_AFTER_PACKAGE" value="1" />
|
||||||
|
<option name="CLASS_BRACE_STYLE" value="1" />
|
||||||
|
<option name="METHOD_BRACE_STYLE" value="1" />
|
||||||
|
<option name="SPECIAL_ELSE_IF_TREATMENT" value="true" />
|
||||||
|
<option name="IF_BRACE_FORCE" value="3" />
|
||||||
|
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||||
|
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||||
|
<option name="FOR_BRACE_FORCE" value="3" />
|
||||||
|
<indentOptions>
|
||||||
|
<option name="USE_TAB_CHARACTER" value="true" />
|
||||||
|
</indentOptions>
|
||||||
|
<arrangement>
|
||||||
|
<groups>
|
||||||
|
<group>
|
||||||
|
<type>GETTERS_AND_SETTERS</type>
|
||||||
|
<order>KEEP</order>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<type>DEPENDENT_METHODS</type>
|
||||||
|
<order>DEPTH_FIRST</order>
|
||||||
|
</group>
|
||||||
|
</groups>
|
||||||
|
<rules>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<CONST />
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<FIELD />
|
||||||
|
<PUBLIC />
|
||||||
|
<STATIC />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<FIELD />
|
||||||
|
<PROTECTED />
|
||||||
|
<STATIC />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<FIELD />
|
||||||
|
<PRIVATE />
|
||||||
|
<STATIC />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<FIELD />
|
||||||
|
<PUBLIC />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<FIELD />
|
||||||
|
<PROTECTED />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<FIELD />
|
||||||
|
<PRIVATE />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<CONSTRUCTOR />
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<METHOD />
|
||||||
|
<PUBLIC />
|
||||||
|
<STATIC />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<METHOD />
|
||||||
|
<PROTECTED />
|
||||||
|
<STATIC />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<METHOD />
|
||||||
|
<PRIVATE />
|
||||||
|
<STATIC />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<METHOD />
|
||||||
|
<PUBLIC />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<METHOD />
|
||||||
|
<PROTECTED />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<METHOD />
|
||||||
|
<PRIVATE />
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<TRAIT />
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<INTERFACE />
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<CLASS />
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</rules>
|
||||||
|
</arrangement>
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="XML">
|
||||||
|
<indentOptions>
|
||||||
|
<option name="USE_TAB_CHARACTER" value="true" />
|
||||||
|
</indentOptions>
|
||||||
|
<arrangement>
|
||||||
|
<rules>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<NAME>xmlns:.*</NAME>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</rules>
|
||||||
|
</arrangement>
|
||||||
|
</codeStyleSettings>
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
7
.idea/encodings.xml
generated
Normal file
7
.idea/encodings.xml
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false">
|
||||||
|
<file url="PROJECT" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -51,8 +51,7 @@ logMessage('Starting ManiaControl ...');
|
|||||||
logMessage('Checking for installed MySQLi ... ', false);
|
logMessage('Checking for installed MySQLi ... ', false);
|
||||||
if (extension_loaded('mysqli')) {
|
if (extension_loaded('mysqli')) {
|
||||||
logMessage('FOUND!');
|
logMessage('FOUND!');
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
logMessage('NOT FOUND!');
|
logMessage('NOT FOUND!');
|
||||||
logMessage(' -- You don\'t have MySQLi installed, make sure to check: http://www.php.net/manual/en/mysqli.installation.php');
|
logMessage(' -- You don\'t have MySQLi installed, make sure to check: http://www.php.net/manual/en/mysqli.installation.php');
|
||||||
exit();
|
exit();
|
||||||
@ -61,8 +60,7 @@ else {
|
|||||||
logMessage('Checking for installed cURL ... ', false);
|
logMessage('Checking for installed cURL ... ', false);
|
||||||
if (extension_loaded('curl')) {
|
if (extension_loaded('curl')) {
|
||||||
logMessage('FOUND!');
|
logMessage('FOUND!');
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
logMessage('NOT FOUND!');
|
logMessage('NOT FOUND!');
|
||||||
logMessage('You don\'t have cURL installed, make sure to check: http://www.php.net/manual/en/curl.installation.php');
|
logMessage('You don\'t have cURL installed, make sure to check: http://www.php.net/manual/en/curl.installation.php');
|
||||||
exit();
|
exit();
|
||||||
@ -72,6 +70,7 @@ else {
|
|||||||
* Log and echo the given text
|
* Log and echo the given text
|
||||||
*
|
*
|
||||||
* @param string $message
|
* @param string $message
|
||||||
|
* @param bool $eol
|
||||||
*/
|
*/
|
||||||
function logMessage($message, $eol = true) {
|
function logMessage($message, $eol = true) {
|
||||||
$date = date("d.M y H:i:s");
|
$date = date("d.M y H:i:s");
|
||||||
|
@ -18,8 +18,8 @@ use ManiaControl\Players\PlayerManager;
|
|||||||
/**
|
/**
|
||||||
* Class managing Actions Menus
|
* Class managing Actions Menus
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
|
class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
|
||||||
@ -71,28 +71,11 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
|
|||||||
public function addMenuItem(Control $control, $playerAction = true, $order = 0, $description = null) {
|
public function addMenuItem(Control $control, $playerAction = true, $order = 0, $description = null) {
|
||||||
if ($playerAction) {
|
if ($playerAction) {
|
||||||
$this->addPlayerMenuItem($control, $order, $description);
|
$this->addPlayerMenuItem($control, $order, $description);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$this->addAdminMenuItem($control, $order, $description);
|
$this->addAdminMenuItem($control, $order, $description);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes a Menu Item
|
|
||||||
*
|
|
||||||
* @param $order
|
|
||||||
* @param bool $playerAction
|
|
||||||
*/
|
|
||||||
public function removeMenuItem($order, $playerAction = true) {
|
|
||||||
if ($playerAction) {
|
|
||||||
unset($this->playerMenuItems[$order]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
unset($this->adminMenuItems[$order]);
|
|
||||||
}
|
|
||||||
$this->rebuildAndShowMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a new Player Menu Item
|
* Add a new Player Menu Item
|
||||||
*
|
*
|
||||||
@ -109,30 +92,6 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
|
|||||||
$this->rebuildAndShowMenu();
|
$this->rebuildAndShowMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new Admin Menu Item
|
|
||||||
*
|
|
||||||
* @param Control $control
|
|
||||||
* @param int $order
|
|
||||||
* @param string $description
|
|
||||||
*/
|
|
||||||
public function addAdminMenuItem(Control $control, $order = 0, $description = null) {
|
|
||||||
if (!isset($this->adminMenuItems[$order])) {
|
|
||||||
$this->adminMenuItems[$order] = array();
|
|
||||||
}
|
|
||||||
array_push($this->adminMenuItems[$order], array($control, $description));
|
|
||||||
krsort($this->adminMenuItems);
|
|
||||||
$this->rebuildAndShowMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle ManiaControl AfterInit callback
|
|
||||||
*/
|
|
||||||
public function handleAfterInit() {
|
|
||||||
$this->initCompleted = true;
|
|
||||||
$this->rebuildAndShowMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build and show the menus to everyone (if a menu get made after the init)
|
* Build and show the menus to everyone (if a menu get made after the init)
|
||||||
*/
|
*/
|
||||||
@ -147,16 +106,6 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle PlayerJoined callback
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function handlePlayerJoined(Player $player) {
|
|
||||||
$maniaLink = $this->buildMenuIconsManialink($player);
|
|
||||||
$this->maniaControl->manialinkManager->sendManialink($maniaLink, $player->login);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the Manialink
|
* Builds the Manialink
|
||||||
*
|
*
|
||||||
@ -314,4 +263,53 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
|
|||||||
|
|
||||||
return $manialink;
|
return $manialink;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a new Admin Menu Item
|
||||||
|
*
|
||||||
|
* @param Control $control
|
||||||
|
* @param int $order
|
||||||
|
* @param string $description
|
||||||
|
*/
|
||||||
|
public function addAdminMenuItem(Control $control, $order = 0, $description = null) {
|
||||||
|
if (!isset($this->adminMenuItems[$order])) {
|
||||||
|
$this->adminMenuItems[$order] = array();
|
||||||
|
}
|
||||||
|
array_push($this->adminMenuItems[$order], array($control, $description));
|
||||||
|
krsort($this->adminMenuItems);
|
||||||
|
$this->rebuildAndShowMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a Menu Item
|
||||||
|
*
|
||||||
|
* @param $order
|
||||||
|
* @param bool $playerAction
|
||||||
|
*/
|
||||||
|
public function removeMenuItem($order, $playerAction = true) {
|
||||||
|
if ($playerAction) {
|
||||||
|
unset($this->playerMenuItems[$order]);
|
||||||
|
} else {
|
||||||
|
unset($this->adminMenuItems[$order]);
|
||||||
|
}
|
||||||
|
$this->rebuildAndShowMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle ManiaControl AfterInit callback
|
||||||
|
*/
|
||||||
|
public function handleAfterInit() {
|
||||||
|
$this->initCompleted = true;
|
||||||
|
$this->rebuildAndShowMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle PlayerJoined callback
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function handlePlayerJoined(Player $player) {
|
||||||
|
$maniaLink = $this->buildMenuIconsManialink($player);
|
||||||
|
$this->maniaControl->manialinkManager->sendManialink($maniaLink, $player->login);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,8 @@ use ManiaControl\Players\Player;
|
|||||||
/**
|
/**
|
||||||
* Widget Class listing Authorized Players
|
* Widget Class listing Authorized Players
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
|
class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
|
||||||
@ -115,7 +115,7 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$i = 1;
|
$i = 1;
|
||||||
$y = $y - 10;
|
$y = $y - 10;
|
||||||
$pageFrames = array();
|
$pageFrames = array();
|
||||||
foreach($admins as $admin) {
|
foreach ($admins as $admin) {
|
||||||
if (!isset($pageFrame)) {
|
if (!isset($pageFrame)) {
|
||||||
$pageFrame = new Frame();
|
$pageFrame = new Frame();
|
||||||
$frame->add($pageFrame);
|
$frame->add($pageFrame);
|
||||||
@ -217,7 +217,7 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$adminLogin = $callback[1][1];
|
$adminLogin = $callback[1][1];
|
||||||
$targetLogin = $actionArray[2];
|
$targetLogin = $actionArray[2];
|
||||||
|
|
||||||
switch($action) {
|
switch ($action) {
|
||||||
case self::ACTION_REVOKE_RIGHTS:
|
case self::ACTION_REVOKE_RIGHTS:
|
||||||
$this->maniaControl->playerManager->playerActions->revokeAuthLevel($adminLogin, $targetLogin);
|
$this->maniaControl->playerManager->playerActions->revokeAuthLevel($adminLogin, $targetLogin);
|
||||||
break;
|
break;
|
||||||
@ -227,10 +227,10 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
/**
|
/**
|
||||||
* Reopen the widget on Map Begin, MapListChanged, etc.
|
* Reopen the widget on Map Begin, MapListChanged, etc.
|
||||||
*
|
*
|
||||||
* @param array $callback
|
* @param Player $player
|
||||||
*/
|
*/
|
||||||
public function updateWidget(Player $player) {
|
public function updateWidget(Player $player) {
|
||||||
foreach($this->adminListShown as $login => $shown) {
|
foreach ($this->adminListShown as $login => $shown) {
|
||||||
if ($shown) {
|
if ($shown) {
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
if ($player) {
|
if ($player) {
|
||||||
|
@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
namespace ManiaControl\Admin;
|
namespace ManiaControl\Admin;
|
||||||
|
|
||||||
use ManiaControl\ManiaControl;
|
|
||||||
use ManiaControl\Commands\CommandListener;
|
use ManiaControl\Commands\CommandListener;
|
||||||
|
use ManiaControl\ManiaControl;
|
||||||
use ManiaControl\Players\Player;
|
use ManiaControl\Players\Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class offering Commands to grant Authorizations to Players
|
* Class offering Commands to grant Authorizations to Players
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class AuthCommands implements CommandListener {
|
class AuthCommands implements CommandListener {
|
||||||
@ -28,9 +28,9 @@ class AuthCommands implements CommandListener {
|
|||||||
$this->maniaControl = $maniaControl;
|
$this->maniaControl = $maniaControl;
|
||||||
|
|
||||||
// Register for commands
|
// Register for commands
|
||||||
$this->maniaControl->commandManager->registerCommandListener('addsuperadmin', $this, 'command_AddSuperAdmin',true, 'Adds player to adminlist as SuperAdmin.');
|
$this->maniaControl->commandManager->registerCommandListener('addsuperadmin', $this, 'command_AddSuperAdmin', true, 'Add Player to the AdminList as SuperAdmin.');
|
||||||
$this->maniaControl->commandManager->registerCommandListener('addadmin', $this, 'command_AddAdmin',true, 'Adds player to adminlist as Admin.');
|
$this->maniaControl->commandManager->registerCommandListener('addadmin', $this, 'command_AddAdmin', true, 'Add Player to the AdminList as Admin.');
|
||||||
$this->maniaControl->commandManager->registerCommandListener('addmod', $this, 'command_AddModerator',true, 'Add player to adminlist as Moderator.');
|
$this->maniaControl->commandManager->registerCommandListener('addmod', $this, 'command_AddModerator', true, 'Add Player to the AdminList as Moderator.');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,6 +64,17 @@ class AuthCommands implements CommandListener {
|
|||||||
$this->maniaControl->chat->sendSuccess($message);
|
$this->maniaControl->chat->sendSuccess($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send usage example for //addsuperadmin command
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function sendAddSuperAdminUsageInfo(Player $player) {
|
||||||
|
$message = "Usage Example: '//addsuperadmin login'";
|
||||||
|
return $this->maniaControl->chat->sendUsageInfo($message, $player->login);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle //addadmin command
|
* Handle //addadmin command
|
||||||
*
|
*
|
||||||
@ -95,6 +106,17 @@ class AuthCommands implements CommandListener {
|
|||||||
$this->maniaControl->chat->sendSuccess($message);
|
$this->maniaControl->chat->sendSuccess($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send usage example for //addadmin command
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function sendAddAdminUsageInfo(Player $player) {
|
||||||
|
$message = "Usage Example: '//addadmin login'";
|
||||||
|
return $this->maniaControl->chat->sendUsageInfo($message, $player->login);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle //addmod command
|
* Handle //addmod command
|
||||||
*
|
*
|
||||||
@ -126,28 +148,6 @@ class AuthCommands implements CommandListener {
|
|||||||
$this->maniaControl->chat->sendSuccess($message);
|
$this->maniaControl->chat->sendSuccess($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Send usage example for //addsuperadmin command
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function sendAddSuperAdminUsageInfo(Player $player) {
|
|
||||||
$message = "Usage Example: '//addsuperadmin login'";
|
|
||||||
return $this->maniaControl->chat->sendUsageInfo($message, $player->login);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send usage example for //addadmin command
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function sendAddAdminUsageInfo(Player $player) {
|
|
||||||
$message = "Usage Example: '//addadmin login'";
|
|
||||||
return $this->maniaControl->chat->sendUsageInfo($message, $player->login);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send usage example for //addop command
|
* Send usage example for //addop command
|
||||||
*
|
*
|
||||||
|
@ -11,8 +11,8 @@ use ManiaControl\Players\PlayerManager;
|
|||||||
/**
|
/**
|
||||||
* Class managing Authentication Levels
|
* Class managing Authentication Levels
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class AuthenticationManager implements CallbackListener {
|
class AuthenticationManager implements CallbackListener {
|
||||||
@ -53,6 +53,85 @@ class AuthenticationManager implements CallbackListener {
|
|||||||
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_ONINIT, $this, 'handleOnInit');
|
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_ONINIT, $this, 'handleOnInit');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Name of the Authentication Level from Level Int
|
||||||
|
*
|
||||||
|
* @param mixed $authLevelInt
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getAuthLevelName($authLevelInt) {
|
||||||
|
$authLevelInt = self::getAuthLevelInt($authLevelInt);
|
||||||
|
switch ($authLevelInt) {
|
||||||
|
case self::AUTH_LEVEL_MASTERADMIN:
|
||||||
|
return self::AUTH_NAME_MASTERADMIN;
|
||||||
|
case self::AUTH_LEVEL_SUPERADMIN:
|
||||||
|
return self::AUTH_NAME_SUPERADMIN;
|
||||||
|
case self::AUTH_LEVEL_ADMIN:
|
||||||
|
return self::AUTH_NAME_ADMIN;
|
||||||
|
case self::AUTH_LEVEL_MODERATOR:
|
||||||
|
return self::AUTH_NAME_MODERATOR;
|
||||||
|
}
|
||||||
|
return self::AUTH_NAME_PLAYER;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Authentication Level Int from the given Param
|
||||||
|
*
|
||||||
|
* @param mixed $authLevelParam
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public static function getAuthLevelInt($authLevelParam) {
|
||||||
|
if (is_object($authLevelParam) && property_exists($authLevelParam, 'authLevel')) {
|
||||||
|
return (int)$authLevelParam->authLevel;
|
||||||
|
}
|
||||||
|
if (is_string($authLevelParam)) {
|
||||||
|
return self::getAuthLevel($authLevelParam);
|
||||||
|
}
|
||||||
|
return (int)$authLevelParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Authentication Level Int from Level Name
|
||||||
|
*
|
||||||
|
* @param string $authLevelName
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public static function getAuthLevel($authLevelName) {
|
||||||
|
$authLevelName = (string)$authLevelName;
|
||||||
|
switch ($authLevelName) {
|
||||||
|
case self::AUTH_NAME_MASTERADMIN:
|
||||||
|
return self::AUTH_LEVEL_MASTERADMIN;
|
||||||
|
case self::AUTH_NAME_SUPERADMIN:
|
||||||
|
return self::AUTH_LEVEL_SUPERADMIN;
|
||||||
|
case self::AUTH_NAME_ADMIN:
|
||||||
|
return self::AUTH_LEVEL_ADMIN;
|
||||||
|
case self::AUTH_NAME_MODERATOR:
|
||||||
|
return self::AUTH_LEVEL_MODERATOR;
|
||||||
|
}
|
||||||
|
return self::AUTH_LEVEL_PLAYER;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Abbreviation of the Authentication Level from Level Int
|
||||||
|
*
|
||||||
|
* @param mixed $authLevelInt
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getAuthLevelAbbreviation($authLevelInt) {
|
||||||
|
$authLevelInt = self::getAuthLevelInt($authLevelInt);
|
||||||
|
switch ($authLevelInt) {
|
||||||
|
case self::AUTH_LEVEL_MASTERADMIN:
|
||||||
|
return 'MA';
|
||||||
|
case self::AUTH_LEVEL_SUPERADMIN:
|
||||||
|
return 'SA';
|
||||||
|
case self::AUTH_LEVEL_ADMIN:
|
||||||
|
return 'AD';
|
||||||
|
case self::AUTH_LEVEL_MODERATOR:
|
||||||
|
return 'MOD';
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle ManiaControl OnInit Callback
|
* Handle ManiaControl OnInit Callback
|
||||||
*/
|
*/
|
||||||
@ -61,7 +140,7 @@ class AuthenticationManager implements CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update MasterAdmins based on config
|
* Update MasterAdmins based on Config
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
@ -102,7 +181,7 @@ class AuthenticationManager implements CallbackListener {
|
|||||||
}
|
}
|
||||||
$success = true;
|
$success = true;
|
||||||
foreach ($masterAdmins as $masterAdmin) {
|
foreach ($masterAdmins as $masterAdmin) {
|
||||||
$login = (string) $masterAdmin;
|
$login = (string)$masterAdmin;
|
||||||
$adminStatement->bind_param('si', $login, $masterAdminLevel);
|
$adminStatement->bind_param('si', $login, $masterAdminLevel);
|
||||||
$adminStatement->execute();
|
$adminStatement->execute();
|
||||||
if ($adminStatement->error) {
|
if ($adminStatement->error) {
|
||||||
@ -124,8 +203,7 @@ class AuthenticationManager implements CallbackListener {
|
|||||||
$mysqli = $this->maniaControl->database->mysqli;
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
if ($authLevel < 0) {
|
if ($authLevel < 0) {
|
||||||
$query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` > 0 ORDER BY `authLevel` DESC;";
|
$query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` > 0 ORDER BY `authLevel` DESC;";
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` = " . $authLevel . ";";
|
$query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` = " . $authLevel . ";";
|
||||||
}
|
}
|
||||||
$result = $mysqli->query($query);
|
$result = $mysqli->query($query);
|
||||||
@ -151,7 +229,7 @@ class AuthenticationManager implements CallbackListener {
|
|||||||
if (!$player || !is_numeric($authLevel)) {
|
if (!$player || !is_numeric($authLevel)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$authLevel = (int) $authLevel;
|
$authLevel = (int)$authLevel;
|
||||||
if ($authLevel >= self::AUTH_LEVEL_MASTERADMIN) {
|
if ($authLevel >= self::AUTH_LEVEL_MASTERADMIN) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -197,17 +275,6 @@ class AuthenticationManager implements CallbackListener {
|
|||||||
return $this->maniaControl->chat->sendError('You do not have the required Rights to perform this Action!', $player->login);
|
return $this->maniaControl->chat->sendError('You do not have the required Rights to perform this Action!', $player->login);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the Player has enough Rights
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
* @param int $neededAuthLevel
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function checkRight(Player $player, $neededAuthLevel) {
|
|
||||||
return ($player->authLevel >= $neededAuthLevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks the permission by a right name
|
* Checks the permission by a right name
|
||||||
*
|
*
|
||||||
@ -220,6 +287,17 @@ class AuthenticationManager implements CallbackListener {
|
|||||||
return $this->checkRight($player, $right);
|
return $this->checkRight($player, $right);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the Player has enough Rights
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @param int $neededAuthLevel
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function checkRight(Player $player, $neededAuthLevel) {
|
||||||
|
return ($player->authLevel >= $neededAuthLevel);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines a Minimum Right Level needed for an action
|
* Defines a Minimum Right Level needed for an action
|
||||||
*
|
*
|
||||||
@ -229,83 +307,4 @@ class AuthenticationManager implements CallbackListener {
|
|||||||
public function definePermissionLevel($rightName, $authLevelNeeded) {
|
public function definePermissionLevel($rightName, $authLevelNeeded) {
|
||||||
$this->maniaControl->settingManager->initSetting($this, $rightName, $authLevelNeeded);
|
$this->maniaControl->settingManager->initSetting($this, $rightName, $authLevelNeeded);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Name of the Authentication Level from Level Int
|
|
||||||
*
|
|
||||||
* @param mixed $authLevelInt
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function getAuthLevelName($authLevelInt) {
|
|
||||||
$authLevelInt = self::getAuthLevelInt($authLevelInt);
|
|
||||||
switch ($authLevelInt) {
|
|
||||||
case self::AUTH_LEVEL_MASTERADMIN:
|
|
||||||
return self::AUTH_NAME_MASTERADMIN;
|
|
||||||
case self::AUTH_LEVEL_SUPERADMIN:
|
|
||||||
return self::AUTH_NAME_SUPERADMIN;
|
|
||||||
case self::AUTH_LEVEL_ADMIN:
|
|
||||||
return self::AUTH_NAME_ADMIN;
|
|
||||||
case self::AUTH_LEVEL_MODERATOR:
|
|
||||||
return self::AUTH_NAME_MODERATOR;
|
|
||||||
}
|
|
||||||
return self::AUTH_NAME_PLAYER;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Abbreviation of the Authentication Level from Level Int
|
|
||||||
*
|
|
||||||
* @param mixed $authLevelInt
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function getAuthLevelAbbreviation($authLevelInt) {
|
|
||||||
$authLevelInt = self::getAuthLevelInt($authLevelInt);
|
|
||||||
switch ($authLevelInt) {
|
|
||||||
case self::AUTH_LEVEL_MASTERADMIN:
|
|
||||||
return 'MA';
|
|
||||||
case self::AUTH_LEVEL_SUPERADMIN:
|
|
||||||
return 'SA';
|
|
||||||
case self::AUTH_LEVEL_ADMIN:
|
|
||||||
return 'AD';
|
|
||||||
case self::AUTH_LEVEL_MODERATOR:
|
|
||||||
return 'MOD';
|
|
||||||
}
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Authentication Level Int from Level Name
|
|
||||||
*
|
|
||||||
* @param string $authLevelName
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public static function getAuthLevel($authLevelName) {
|
|
||||||
$authLevelName = (string) $authLevelName;
|
|
||||||
switch ($authLevelName) {
|
|
||||||
case self::AUTH_NAME_MASTERADMIN:
|
|
||||||
return self::AUTH_LEVEL_MASTERADMIN;
|
|
||||||
case self::AUTH_NAME_SUPERADMIN:
|
|
||||||
return self::AUTH_LEVEL_SUPERADMIN;
|
|
||||||
case self::AUTH_NAME_ADMIN:
|
|
||||||
return self::AUTH_LEVEL_ADMIN;
|
|
||||||
case self::AUTH_NAME_MODERATOR:
|
|
||||||
return self::AUTH_LEVEL_MODERATOR;
|
|
||||||
}
|
|
||||||
return self::AUTH_LEVEL_PLAYER;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Authentication Level Int from the given Param
|
|
||||||
*
|
|
||||||
* @param mixed $authLevelParam
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public static function getAuthLevelInt($authLevelParam) {
|
|
||||||
if (is_object($authLevelParam) && property_exists($authLevelParam, 'authLevel')) {
|
|
||||||
return (int) $authLevelParam->authLevel;
|
|
||||||
}
|
|
||||||
if (is_string($authLevelParam)) {
|
|
||||||
return self::getAuthLevel($authLevelParam);
|
|
||||||
}
|
|
||||||
return (int) $authLevelParam;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace ManiaControl\Bills;
|
namespace ManiaControl\Bills;
|
||||||
|
|
||||||
use ManiaControl\Players\Player;
|
use ManiaControl\Players\Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ManiaControl BillData Structure
|
* ManiaControl BillData Structure
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class BillData {
|
class BillData {
|
||||||
@ -17,19 +18,20 @@ class BillData {
|
|||||||
public $function = null;
|
public $function = null;
|
||||||
public $pay = false;
|
public $pay = false;
|
||||||
public $player = null;
|
public $player = null;
|
||||||
public $receiverLogin = false;
|
public $receiverLogin = null;
|
||||||
public $amount = 0;
|
public $amount = 0;
|
||||||
public $creationTime = -1;
|
public $creationTime = -1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct new BillData
|
* Construct new BillData
|
||||||
|
*
|
||||||
* @param mixed $function
|
* @param mixed $function
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
* @param int $amount
|
* @param int $amount
|
||||||
* @param string $pay
|
* @param bool $pay
|
||||||
* @param string $receiverLogin
|
* @param string $receiverLogin
|
||||||
*/
|
*/
|
||||||
public function __construct($function, $player, $amount, $pay = false, $receiverLogin = false) {
|
public function __construct($function, Player $player, $amount, $pay = false, $receiverLogin = null) {
|
||||||
$this->function = $function;
|
$this->function = $function;
|
||||||
$this->player = $player;
|
$this->player = $player;
|
||||||
$this->amount = $amount;
|
$this->amount = $amount;
|
||||||
|
@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Structures\Bill;
|
|||||||
/**
|
/**
|
||||||
* ManiaControl Bill-Manager
|
* ManiaControl Bill-Manager
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class BillManager implements CallbackListener {
|
class BillManager implements CallbackListener {
|
||||||
@ -103,7 +103,7 @@ class BillManager implements CallbackListener {
|
|||||||
$billData = $this->openBills[$billId];
|
$billData = $this->openBills[$billId];
|
||||||
|
|
||||||
/** @var BillData $billData */
|
/** @var BillData $billData */
|
||||||
switch($callback[1][1]) {
|
switch ($callback[1][1]) {
|
||||||
case Bill::STATE_PAYED:
|
case Bill::STATE_PAYED:
|
||||||
if ($billData->pay) {
|
if ($billData->pay) {
|
||||||
call_user_func($billData->function, $billData, self::PAYED_FROM_SERVER);
|
call_user_func($billData->function, $billData, self::PAYED_FROM_SERVER);
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
namespace ManiaControl\Callbacks;
|
namespace ManiaControl\Callbacks;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for CallbackListener
|
* Interface for Callback Listener
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
interface CallbackListener {
|
interface CallbackListener {
|
||||||
|
@ -7,8 +7,8 @@ use ManiaControl\ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Class for managing Server and ManiaControl Callbacks
|
* Class for managing Server and ManiaControl Callbacks
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class CallbackManager {
|
class CallbackManager {
|
||||||
@ -118,8 +118,8 @@ class CallbackManager {
|
|||||||
*/
|
*/
|
||||||
public function unregisterCallbackListener(CallbackListener $listener) {
|
public function unregisterCallbackListener(CallbackListener $listener) {
|
||||||
$removed = false;
|
$removed = false;
|
||||||
foreach($this->callbackListeners as &$listeners) {
|
foreach ($this->callbackListeners as &$listeners) {
|
||||||
foreach($listeners as $key => &$listenerCallback) {
|
foreach ($listeners as $key => &$listenerCallback) {
|
||||||
if ($listenerCallback[0] != $listener) {
|
if ($listenerCallback[0] != $listener) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -138,8 +138,8 @@ class CallbackManager {
|
|||||||
*/
|
*/
|
||||||
public function unregisterScriptCallbackListener(CallbackListener $listener) {
|
public function unregisterScriptCallbackListener(CallbackListener $listener) {
|
||||||
$removed = false;
|
$removed = false;
|
||||||
foreach($this->scriptCallbackListener as &$listeners) {
|
foreach ($this->scriptCallbackListener as &$listeners) {
|
||||||
foreach($listeners as $key => &$listenerCallback) {
|
foreach ($listeners as $key => &$listenerCallback) {
|
||||||
if ($listenerCallback[0] != $listener) {
|
if ($listenerCallback[0] != $listener) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -150,38 +150,6 @@ class CallbackManager {
|
|||||||
return $removed;
|
return $removed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Trigger a specific Callback
|
|
||||||
*
|
|
||||||
* @param string $callbackName
|
|
||||||
*/
|
|
||||||
public function triggerCallback($callbackName) {
|
|
||||||
if (!array_key_exists($callbackName, $this->callbackListeners)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$params = func_get_args();
|
|
||||||
$params = array_slice($params, 1, count($params), true);
|
|
||||||
foreach($this->callbackListeners[$callbackName] as $listener) {
|
|
||||||
call_user_func_array(array($listener[0], $listener[1]), $params);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trigger a specific Script Callback
|
|
||||||
*
|
|
||||||
* @param string $callbackName
|
|
||||||
*/
|
|
||||||
public function triggerScriptCallback($callbackName) {
|
|
||||||
if (!array_key_exists($callbackName, $this->scriptCallbackListener)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$params = func_get_args();
|
|
||||||
$params = array_slice($params, 1, count($params), true);
|
|
||||||
foreach($this->scriptCallbackListener[$callbackName] as $listener) {
|
|
||||||
call_user_func_array(array($listener[0], $listener[1]), $params);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trigger internal Callbacks and manage Server Callbacks
|
* Trigger internal Callbacks and manage Server Callbacks
|
||||||
*/
|
*/
|
||||||
@ -197,7 +165,7 @@ class CallbackManager {
|
|||||||
$callbacks = $this->maniaControl->client->executeCallbacks();
|
$callbacks = $this->maniaControl->client->executeCallbacks();
|
||||||
|
|
||||||
// Handle callbacks
|
// Handle callbacks
|
||||||
foreach($callbacks as $callback) {
|
foreach ($callbacks as $callback) {
|
||||||
$this->handleCallback($callback);
|
$this->handleCallback($callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -209,7 +177,7 @@ class CallbackManager {
|
|||||||
*/
|
*/
|
||||||
private function handleCallback(array $callback) {
|
private function handleCallback(array $callback) {
|
||||||
$callbackName = $callback[0];
|
$callbackName = $callback[0];
|
||||||
switch($callbackName) {
|
switch ($callbackName) {
|
||||||
case 'ManiaPlanet.BeginMatch':
|
case 'ManiaPlanet.BeginMatch':
|
||||||
if ($this->maniaControl->mapManager->getCurrentMap()->getGame() == 'sm') {
|
if ($this->maniaControl->mapManager->getCurrentMap()->getGame() == 'sm') {
|
||||||
$this->triggerCallback($callbackName, $callback);
|
$this->triggerCallback($callbackName, $callback);
|
||||||
@ -242,6 +210,22 @@ class CallbackManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trigger a specific Callback
|
||||||
|
*
|
||||||
|
* @param string $callbackName
|
||||||
|
*/
|
||||||
|
public function triggerCallback($callbackName) {
|
||||||
|
if (!array_key_exists($callbackName, $this->callbackListeners)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$params = func_get_args();
|
||||||
|
$params = array_slice($params, 1, count($params), true);
|
||||||
|
foreach ($this->callbackListeners[$callbackName] as $listener) {
|
||||||
|
call_user_func_array(array($listener[0], $listener[1]), $params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle the given Script Callback
|
* Handle the given Script Callback
|
||||||
*
|
*
|
||||||
@ -253,4 +237,20 @@ class CallbackManager {
|
|||||||
$this->triggerScriptCallback($scriptCallbackName, $scriptCallbackData);
|
$this->triggerScriptCallback($scriptCallbackName, $scriptCallbackData);
|
||||||
$this->triggerCallback(Callbacks::SCRIPTCALLBACK, $scriptCallbackName, $scriptCallbackData[1]);
|
$this->triggerCallback(Callbacks::SCRIPTCALLBACK, $scriptCallbackName, $scriptCallbackData[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trigger a specific Script Callback
|
||||||
|
*
|
||||||
|
* @param string $callbackName
|
||||||
|
*/
|
||||||
|
public function triggerScriptCallback($callbackName) {
|
||||||
|
if (!array_key_exists($callbackName, $this->scriptCallbackListener)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$params = func_get_args();
|
||||||
|
$params = array_slice($params, 1, count($params), true);
|
||||||
|
foreach ($this->scriptCallbackListener[$callbackName] as $listener) {
|
||||||
|
call_user_func_array(array($listener[0], $listener[1]), $params);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace ManiaControl\Callbacks;
|
namespace ManiaControl\Callbacks;
|
||||||
|
|
||||||
//TODO method class for all the libxmlrpc get Methods, to fetch the callback asnyc
|
//TODO method class for all the libxmlrpc get Methods, to fetch the callback asnyc
|
||||||
/**
|
/**
|
||||||
* Callbacks Interface
|
* Callbacks Interface
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
interface Callbacks {
|
interface Callbacks {
|
||||||
|
@ -5,6 +5,13 @@ namespace ManiaControl\Callbacks;
|
|||||||
|
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class managing & converting LibXmlRpc Callbacks
|
||||||
|
*
|
||||||
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
|
* @copyright 2014 ManiaControl Team
|
||||||
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
|
*/
|
||||||
class LibXmlRpcCallbackManager implements CallbackListener {
|
class LibXmlRpcCallbackManager implements CallbackListener {
|
||||||
/*
|
/*
|
||||||
* Private Properties
|
* Private Properties
|
||||||
@ -15,6 +22,7 @@ class LibXmlRpcCallbackManager implements CallbackListener {
|
|||||||
* Create a new LibXmlRpc Callbacks Instance
|
* Create a new LibXmlRpc Callbacks Instance
|
||||||
*
|
*
|
||||||
* @param ManiaControl $maniaControl
|
* @param ManiaControl $maniaControl
|
||||||
|
* @param CallbackManager $callbackManager
|
||||||
*/
|
*/
|
||||||
public function __construct(ManiaControl $maniaControl, CallbackManager $callbackManager) {
|
public function __construct(ManiaControl $maniaControl, CallbackManager $callbackManager) {
|
||||||
$this->maniaControl = $maniaControl;
|
$this->maniaControl = $maniaControl;
|
||||||
@ -24,11 +32,11 @@ class LibXmlRpcCallbackManager implements CallbackListener {
|
|||||||
/**
|
/**
|
||||||
* Handle Script Callbacks
|
* Handle Script Callbacks
|
||||||
*
|
*
|
||||||
* @param $name
|
* @param string $name
|
||||||
* @param $data
|
* @param array $data
|
||||||
*/
|
*/
|
||||||
public function handleScriptCallbacks($name, $data) {
|
public function handleScriptCallbacks($name, array $data) {
|
||||||
switch($name) {
|
switch ($name) {
|
||||||
case 'LibXmlRpc_BeginMatch':
|
case 'LibXmlRpc_BeginMatch':
|
||||||
$this->maniaControl->callbackManager->triggerCallback(Callbacks::BEGINMATCH, $data[0]);
|
$this->maniaControl->callbackManager->triggerCallback(Callbacks::BEGINMATCH, $data[0]);
|
||||||
break;
|
break;
|
||||||
@ -76,9 +84,9 @@ class LibXmlRpcCallbackManager implements CallbackListener {
|
|||||||
/**
|
/**
|
||||||
* Triggers the Ranking of a Player
|
* Triggers the Ranking of a Player
|
||||||
*
|
*
|
||||||
* @param $data
|
* @param array $data
|
||||||
*/
|
*/
|
||||||
private function triggerPlayerRanking($data) {
|
private function triggerPlayerRanking(array $data) {
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($data[1]);
|
$player = $this->maniaControl->playerManager->getPlayer($data[1]);
|
||||||
$this->maniaControl->callbackManager->triggerCallback(Callbacks::PLAYERRANKING, $player, $data[0], $data[6], $data[5]);
|
$this->maniaControl->callbackManager->triggerCallback(Callbacks::PLAYERRANKING, $player, $data[0], $data[6], $data[5]);
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,8 @@ use ManiaControl\ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Class handling and parsing ShootMania Callbacks
|
* Class handling and parsing ShootMania Callbacks
|
||||||
*
|
*
|
||||||
* @author steeffeen
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ShootManiaCallbacks implements CallbackListener {
|
class ShootManiaCallbacks implements CallbackListener {
|
||||||
@ -29,6 +29,7 @@ class ShootManiaCallbacks implements CallbackListener {
|
|||||||
* Create a new ShootMania Callbacks Instance
|
* Create a new ShootMania Callbacks Instance
|
||||||
*
|
*
|
||||||
* @param ManiaControl $maniaControl
|
* @param ManiaControl $maniaControl
|
||||||
|
* @param CallbackManager $callbackManager
|
||||||
*/
|
*/
|
||||||
public function __construct(ManiaControl $maniaControl, CallbackManager $callbackManager) {
|
public function __construct(ManiaControl $maniaControl, CallbackManager $callbackManager) {
|
||||||
$this->maniaControl = $maniaControl;
|
$this->maniaControl = $maniaControl;
|
||||||
@ -42,11 +43,11 @@ class ShootManiaCallbacks implements CallbackListener {
|
|||||||
/**
|
/**
|
||||||
* Handle Script Callbacks
|
* Handle Script Callbacks
|
||||||
*
|
*
|
||||||
* @param $name
|
* @param string $name
|
||||||
* @param $data
|
* @param array $data
|
||||||
*/
|
*/
|
||||||
public function handleScriptCallbacks($name, $data) {
|
public function handleScriptCallbacks($name, $data) {
|
||||||
switch($name) {
|
switch ($name) {
|
||||||
case 'LibXmlRpc_Rankings':
|
case 'LibXmlRpc_Rankings':
|
||||||
$this->maniaControl->server->rankingManager->updateRankings($data[0]);
|
$this->maniaControl->server->rankingManager->updateRankings($data[0]);
|
||||||
break;
|
break;
|
||||||
@ -62,7 +63,7 @@ class ShootManiaCallbacks implements CallbackListener {
|
|||||||
/**
|
/**
|
||||||
* Triggers the AFK Status of an Player
|
* Triggers the AFK Status of an Player
|
||||||
*
|
*
|
||||||
* @param $login
|
* @param string $login
|
||||||
*/
|
*/
|
||||||
private function triggerAfkStatus($login) {
|
private function triggerAfkStatus($login) {
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl\Callbacks;
|
|||||||
/**
|
/**
|
||||||
* Interface for TimerListener
|
* Interface for TimerListener
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
interface TimerListener {
|
interface TimerListener {
|
||||||
|
@ -7,8 +7,8 @@ use ManiaControl\ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Class for managing Timers
|
* Class for managing Timers
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class TimerManager {
|
class TimerManager {
|
||||||
@ -39,27 +39,12 @@ class TimerManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister a Timer Listening
|
* Register a Timer Listening, note < 10ms it can get inaccurate
|
||||||
* @param TimerListener $listener
|
|
||||||
* @param $method
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function unregisterTimerListening(TimerListener $listener, $method){
|
|
||||||
foreach($this->timerListenings as $key => $listening){
|
|
||||||
if($listening->listener == $listener && $listening->method == $method){
|
|
||||||
unset($this->timerListenings[$key]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a Timing Listening, note < 10ms it can get inaccurate
|
|
||||||
*
|
*
|
||||||
* @param TimerListener $listener
|
* @param TimerListener $listener
|
||||||
* @param $method
|
* @param string $method
|
||||||
* @param $time
|
* @param float $time
|
||||||
|
* @param bool $oneTime
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function registerTimerListening(TimerListener $listener, $method, $time, $oneTime = false) {
|
public function registerTimerListening(TimerListener $listener, $method, $time, $oneTime = false) {
|
||||||
@ -75,9 +60,9 @@ class TimerManager {
|
|||||||
$listening->method = $method;
|
$listening->method = $method;
|
||||||
$listening->deltaTime = $time / 1000;
|
$listening->deltaTime = $time / 1000;
|
||||||
$listening->oneTime = $oneTime;
|
$listening->oneTime = $oneTime;
|
||||||
if($oneTime){
|
if ($oneTime) {
|
||||||
$listening->lastTrigger = microtime(true);
|
$listening->lastTrigger = microtime(true);
|
||||||
}else{
|
} else {
|
||||||
$listening->lastTrigger = -1;
|
$listening->lastTrigger = -1;
|
||||||
}
|
}
|
||||||
array_push($this->timerListenings, $listening);
|
array_push($this->timerListenings, $listening);
|
||||||
@ -85,6 +70,23 @@ class TimerManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregister a Timer Listening
|
||||||
|
*
|
||||||
|
* @param TimerListener $listener
|
||||||
|
* @param $method
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function unregisterTimerListening(TimerListener $listener, $method) {
|
||||||
|
foreach ($this->timerListenings as $key => $listening) {
|
||||||
|
if ($listening->listener == $listener && $listening->method == $method) {
|
||||||
|
unset($this->timerListenings[$key]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a Timer Listener
|
* Remove a Timer Listener
|
||||||
*
|
*
|
||||||
@ -93,7 +95,7 @@ class TimerManager {
|
|||||||
*/
|
*/
|
||||||
public function unregisterTimerListenings(TimerListener $listener) {
|
public function unregisterTimerListenings(TimerListener $listener) {
|
||||||
$removed = false;
|
$removed = false;
|
||||||
foreach($this->timerListenings as $key => &$listening) {
|
foreach ($this->timerListenings as $key => &$listening) {
|
||||||
if ($listening->listener != $listener) {
|
if ($listening->listener != $listener) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -108,7 +110,7 @@ class TimerManager {
|
|||||||
*/
|
*/
|
||||||
public function manageTimings() {
|
public function manageTimings() {
|
||||||
$time = microtime(true);
|
$time = microtime(true);
|
||||||
foreach($this->timerListenings as $key => &$listening) {
|
foreach ($this->timerListenings as $key => &$listening) {
|
||||||
|
|
||||||
if (($listening->lastTrigger + $listening->deltaTime) <= $time) {
|
if (($listening->lastTrigger + $listening->deltaTime) <= $time) {
|
||||||
//Increase the lastTrigger time manually (to improve accuracy)
|
//Increase the lastTrigger time manually (to improve accuracy)
|
||||||
|
@ -2,14 +2,13 @@
|
|||||||
|
|
||||||
namespace ManiaControl;
|
namespace ManiaControl;
|
||||||
|
|
||||||
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
|
||||||
use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
|
use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Chat Utility Class
|
* Chat Utility Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class Chat {
|
class Chat {
|
||||||
@ -44,19 +43,16 @@ class Chat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get prefix
|
* Send an information message to the given login
|
||||||
*
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param string $login
|
||||||
* @param string|bool $prefix
|
* @param string|bool $prefix
|
||||||
* @return string
|
* @return bool
|
||||||
*/
|
*/
|
||||||
private function getPrefix($prefix) {
|
public function sendInformation($message, $login = null, $prefix = true) {
|
||||||
if (is_string($prefix)) {
|
$format = $this->maniaControl->settingManager->getSetting($this, self::SETTING_FORMAT_INFORMATION);
|
||||||
return $prefix;
|
return $this->sendChat($format . $message, $login);
|
||||||
}
|
|
||||||
if ($prefix === true) {
|
|
||||||
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_PREFIX);
|
|
||||||
}
|
|
||||||
return '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,25 +77,28 @@ class Chat {
|
|||||||
if (is_object($login) && property_exists($login, 'login')) {
|
if (is_object($login) && property_exists($login, 'login')) {
|
||||||
$login = $login->login;
|
$login = $login->login;
|
||||||
}
|
}
|
||||||
try{
|
try {
|
||||||
$this->maniaControl->client->chatSendServerMessage($chatMessage, $login);
|
$this->maniaControl->client->chatSendServerMessage($chatMessage, $login);
|
||||||
} catch(LoginUnknownException $e){
|
} catch (LoginUnknownException $e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send an information message to the given login
|
* Get prefix
|
||||||
*
|
*
|
||||||
* @param string $message
|
|
||||||
* @param string $login
|
|
||||||
* @param string|bool $prefix
|
* @param string|bool $prefix
|
||||||
* @return bool
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function sendInformation($message, $login = null, $prefix = true) {
|
private function getPrefix($prefix) {
|
||||||
$format = $this->maniaControl->settingManager->getSetting($this, self::SETTING_FORMAT_INFORMATION);
|
if (is_string($prefix)) {
|
||||||
return $this->sendChat($format . $message, $login);
|
return $prefix;
|
||||||
|
}
|
||||||
|
if ($prefix === true) {
|
||||||
|
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_PREFIX);
|
||||||
|
}
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -115,6 +114,19 @@ class Chat {
|
|||||||
return $this->sendChat($format . $message, $login);
|
return $this->sendChat($format . $message, $login);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the Exception Information to the Chat
|
||||||
|
*
|
||||||
|
* @param \Exception $exception
|
||||||
|
* @param string $login
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function sendException(\Exception $exception, $login = null) {
|
||||||
|
$message = "Exception occurred: '{$exception->getMessage()}' ({$exception->getCode()})";
|
||||||
|
$this->maniaControl->errorHandler->triggerDebugNotice($message);
|
||||||
|
return $this->sendError($message, $login);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send an Error Message to the Chat
|
* Send an Error Message to the Chat
|
||||||
*
|
*
|
||||||
@ -128,19 +140,6 @@ class Chat {
|
|||||||
return $this->sendChat($format . $message, $login);
|
return $this->sendChat($format . $message, $login);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Send the Exception Information to the Chat
|
|
||||||
*
|
|
||||||
* @param Exception $exception
|
|
||||||
* @param string $login
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function sendException(\Exception $exception, $login = null) {
|
|
||||||
$message = "Exception occurred: '{$exception->getMessage()}' ({$exception->getCode()})";
|
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice($message);
|
|
||||||
$this->sendError($message, $login);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send an usage info message to the given login
|
* Send an usage info message to the given login
|
||||||
*
|
*
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Utility Class offering Methods to convert and use ManiaPlanet Colors
|
* Utility Class offering Methods to convert and use ManiaPlanet Colors
|
||||||
*
|
*
|
||||||
* @author steeffeen
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
abstract class ColorUtil {
|
abstract class ColorUtil {
|
||||||
@ -47,9 +47,9 @@ abstract class ColorUtil {
|
|||||||
$value = 1.;
|
$value = 1.;
|
||||||
}
|
}
|
||||||
$value *= 15.;
|
$value *= 15.;
|
||||||
$value = (int) round($value);
|
$value = (int)round($value);
|
||||||
if ($value < 10) {
|
if ($value < 10) {
|
||||||
return (string) $value;
|
return (string)$value;
|
||||||
}
|
}
|
||||||
$codes = array(10 => 'a', 11 => 'b', 12 => 'c', 13 => 'd', 14 => 'e', 15 => 'f');
|
$codes = array(10 => 'a', 11 => 'b', 12 => 'c', 13 => 'd', 14 => 'e', 15 => 'f');
|
||||||
return $codes[$value];
|
return $codes[$value];
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Command Line Helper Class
|
* Command Line Helper Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class CommandLineHelper {
|
class CommandLineHelper {
|
||||||
@ -19,7 +19,7 @@ class CommandLineHelper {
|
|||||||
*/
|
*/
|
||||||
public static function getParameter($paramName) {
|
public static function getParameter($paramName) {
|
||||||
global $argv;
|
global $argv;
|
||||||
$paramName = (string) $paramName;
|
$paramName = (string)$paramName;
|
||||||
foreach ($argv as $arg) {
|
foreach ($argv as $arg) {
|
||||||
$parts = explode('=', $arg, 2);
|
$parts = explode('=', $arg, 2);
|
||||||
if (count($parts) < 2) {
|
if (count($parts) < 2) {
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl\Commands;
|
|||||||
/**
|
/**
|
||||||
* Interface for Command Listeners
|
* Interface for Command Listeners
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
interface CommandListener {
|
interface CommandListener {
|
||||||
|
@ -9,8 +9,8 @@ use ManiaControl\ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Class for handling Chat Commands
|
* Class for handling Chat Commands
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class CommandManager implements CallbackListener {
|
class CommandManager implements CallbackListener {
|
||||||
@ -50,7 +50,7 @@ class CommandManager implements CallbackListener {
|
|||||||
public function registerCommandListener($commandName, CommandListener $listener, $method, $adminCommand = false, $description = '') {
|
public function registerCommandListener($commandName, CommandListener $listener, $method, $adminCommand = false, $description = '') {
|
||||||
if (is_array($commandName)) {
|
if (is_array($commandName)) {
|
||||||
$success = true;
|
$success = true;
|
||||||
foreach($commandName as $command) {
|
foreach ($commandName as $command) {
|
||||||
if (!$this->registerCommandListener($command, $listener, $method, $adminCommand, $description)) {
|
if (!$this->registerCommandListener($command, $listener, $method, $adminCommand, $description)) {
|
||||||
$success = false;
|
$success = false;
|
||||||
}
|
}
|
||||||
@ -92,16 +92,16 @@ class CommandManager implements CallbackListener {
|
|||||||
*/
|
*/
|
||||||
public function unregisterCommandListener(CommandListener $listener) {
|
public function unregisterCommandListener(CommandListener $listener) {
|
||||||
$removed = false;
|
$removed = false;
|
||||||
foreach($this->commandListeners as &$listeners) {
|
foreach ($this->commandListeners as &$listeners) {
|
||||||
foreach($listeners as $key => &$listenerCallback) {
|
foreach ($listeners as $key => &$listenerCallback) {
|
||||||
if ($listenerCallback[0] == $listener) {
|
if ($listenerCallback[0] == $listener) {
|
||||||
unset($listeners[$key]);
|
unset($listeners[$key]);
|
||||||
$removed = true;
|
$removed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach($this->adminCommandListeners as &$listeners) {
|
foreach ($this->adminCommandListeners as &$listeners) {
|
||||||
foreach($listeners as $key => &$listenerCallback) {
|
foreach ($listeners as $key => &$listenerCallback) {
|
||||||
if ($listenerCallback[0] == $listener) {
|
if ($listenerCallback[0] == $listener) {
|
||||||
unset($listeners[$key]);
|
unset($listeners[$key]);
|
||||||
$removed = true;
|
$removed = true;
|
||||||
@ -152,7 +152,7 @@ class CommandManager implements CallbackListener {
|
|||||||
|
|
||||||
// Compose uniformed message
|
// Compose uniformed message
|
||||||
$message = '//' . $command;
|
$message = '//' . $command;
|
||||||
foreach($commandArray as $commandPart) {
|
foreach ($commandArray as $commandPart) {
|
||||||
$message .= ' ' . $commandPart;
|
$message .= ' ' . $commandPart;
|
||||||
}
|
}
|
||||||
$callback[1][2] = $message;
|
$callback[1][2] = $message;
|
||||||
@ -167,7 +167,7 @@ class CommandManager implements CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Inform command listeners
|
// Inform command listeners
|
||||||
foreach($commandListeners[$command] as $listener) {
|
foreach ($commandListeners[$command] as $listener) {
|
||||||
call_user_func(array($listener[0], $listener[1]), $callback, $player);
|
call_user_func(array($listener[0], $listener[1]), $callback, $player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,18 +7,17 @@ use FML\Controls\Label;
|
|||||||
use FML\Controls\Quads\Quad_BgsPlayerCard;
|
use FML\Controls\Quads\Quad_BgsPlayerCard;
|
||||||
use FML\ManiaLink;
|
use FML\ManiaLink;
|
||||||
use FML\Script\Features\Paging;
|
use FML\Script\Features\Paging;
|
||||||
|
|
||||||
use ManiaControl\Callbacks\CallbackListener;
|
use ManiaControl\Callbacks\CallbackListener;
|
||||||
use ManiaControl\Callbacks\CallbackManager;
|
use ManiaControl\Callbacks\CallbackManager;
|
||||||
use ManiaControl\Manialinks\ManialinkManager;
|
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
|
use ManiaControl\Manialinks\ManialinkManager;
|
||||||
use ManiaControl\Players\Player;
|
use ManiaControl\Players\Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Help Manager
|
* Help Manager
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class HelpManager implements CommandListener, CallbackListener {
|
class HelpManager implements CommandListener, CallbackListener {
|
||||||
@ -61,22 +60,22 @@ class HelpManager implements CommandListener, CallbackListener {
|
|||||||
public function command_adminHelp(array $chat, Player $player) {
|
public function command_adminHelp(array $chat, Player $player) {
|
||||||
$showCommands = array();
|
$showCommands = array();
|
||||||
$registeredMethods = array();
|
$registeredMethods = array();
|
||||||
foreach(array_reverse($this->adminCommands) as $command) {
|
foreach (array_reverse($this->adminCommands) as $command) {
|
||||||
if(array_key_exists($command['Method'], $registeredMethods) && $showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
|
if (array_key_exists($command['Method'], $registeredMethods) && $showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
|
||||||
$name = $registeredMethods[$command['Method']];
|
$name = $registeredMethods[$command['Method']];
|
||||||
$showCommands[$name]['Name'] .= '|'.$command['Name'];
|
$showCommands[$name]['Name'] .= '|' . $command['Name'];
|
||||||
} else {
|
} else {
|
||||||
$showCommands[$command['Name']] = $command;
|
$showCommands[$command['Name']] = $command;
|
||||||
$registeredMethods[$command['Method']] = $command['Name'];
|
$registeredMethods[$command['Method']] = $command['Name'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usort($showCommands, function($a, $b) {
|
usort($showCommands, function ($a, $b) {
|
||||||
return strcmp($a["Name"], $b["Name"]);
|
return strcmp($a["Name"], $b["Name"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
$message = 'Supported Admin Commands: ';
|
$message = 'Supported Admin Commands: ';
|
||||||
foreach($showCommands as $command) {
|
foreach ($showCommands as $command) {
|
||||||
$message .= $command['Name'] . ',';
|
$message .= $command['Name'] . ',';
|
||||||
}
|
}
|
||||||
$message = substr($message, 0, -1);
|
$message = substr($message, 0, -1);
|
||||||
@ -92,22 +91,22 @@ class HelpManager implements CommandListener, CallbackListener {
|
|||||||
public function command_playerHelp(array $chat, Player $player) {
|
public function command_playerHelp(array $chat, Player $player) {
|
||||||
$showCommands = array();
|
$showCommands = array();
|
||||||
$registeredMethods = array();
|
$registeredMethods = array();
|
||||||
foreach(array_reverse($this->playerCommands) as $command) {
|
foreach (array_reverse($this->playerCommands) as $command) {
|
||||||
if(array_key_exists($command['Method'], $registeredMethods) && $showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
|
if (array_key_exists($command['Method'], $registeredMethods) && $showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
|
||||||
$name = $registeredMethods[$command['Method']];
|
$name = $registeredMethods[$command['Method']];
|
||||||
$showCommands[$name]['Name'] .= '|'.$command['Name'];
|
$showCommands[$name]['Name'] .= '|' . $command['Name'];
|
||||||
} else {
|
} else {
|
||||||
$showCommands[$command['Name']] = $command;
|
$showCommands[$command['Name']] = $command;
|
||||||
$registeredMethods[$command['Method']] = $command['Name'];
|
$registeredMethods[$command['Method']] = $command['Name'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usort($showCommands, function($a, $b) {
|
usort($showCommands, function ($a, $b) {
|
||||||
return strcmp($a["Name"], $b["Name"]);
|
return strcmp($a["Name"], $b["Name"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
$message = 'Supported Player Commands: ';
|
$message = 'Supported Player Commands: ';
|
||||||
foreach($showCommands as $command) {
|
foreach ($showCommands as $command) {
|
||||||
$message .= $command['Name'] . ',';
|
$message .= $command['Name'] . ',';
|
||||||
}
|
}
|
||||||
$message = substr($message, 0, -1);
|
$message = substr($message, 0, -1);
|
||||||
@ -124,16 +123,6 @@ class HelpManager implements CommandListener, CallbackListener {
|
|||||||
$this->prepareHelpAll($this->playerCommands, $player);
|
$this->prepareHelpAll($this->playerCommands, $player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Shows a ManiaLink list of Admin Commands
|
|
||||||
*
|
|
||||||
* @param array $chat
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function command_adminHelpAll(array $chat, Player $player) {
|
|
||||||
$this->prepareHelpAll($this->adminCommands, $player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepares the commands for the HelpAll ManiaLink.
|
* Prepares the commands for the HelpAll ManiaLink.
|
||||||
*
|
*
|
||||||
@ -143,11 +132,11 @@ class HelpManager implements CommandListener, CallbackListener {
|
|||||||
private function prepareHelpAll($commands, $player) {
|
private function prepareHelpAll($commands, $player) {
|
||||||
$showCommands = array();
|
$showCommands = array();
|
||||||
$registeredMethods = array();
|
$registeredMethods = array();
|
||||||
foreach(array_reverse($commands) as $command) {
|
foreach (array_reverse($commands) as $command) {
|
||||||
if(array_key_exists($command['Method'], $registeredMethods)) {
|
if (array_key_exists($command['Method'], $registeredMethods)) {
|
||||||
if($showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
|
if ($showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
|
||||||
$name = $registeredMethods[$command['Method']];
|
$name = $registeredMethods[$command['Method']];
|
||||||
$showCommands[$name]['Name'] .= '|'.$command['Name'];
|
$showCommands[$name]['Name'] .= '|' . $command['Name'];
|
||||||
} else {
|
} else {
|
||||||
$showCommands[$command['Name']] = $command;
|
$showCommands[$command['Name']] = $command;
|
||||||
$registeredMethods[$command['Method']] = $command['Name'];
|
$registeredMethods[$command['Method']] = $command['Name'];
|
||||||
@ -158,7 +147,7 @@ class HelpManager implements CommandListener, CallbackListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usort($showCommands, function($a, $b) {
|
usort($showCommands, function ($a, $b) {
|
||||||
return strcmp($a["Name"], $b["Name"]);
|
return strcmp($a["Name"], $b["Name"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -203,7 +192,7 @@ class HelpManager implements CommandListener, CallbackListener {
|
|||||||
$i = 1;
|
$i = 1;
|
||||||
$y = $y - 10;
|
$y = $y - 10;
|
||||||
$pageFrames = array();
|
$pageFrames = array();
|
||||||
foreach($commands as $command) {
|
foreach ($commands as $command) {
|
||||||
if (!isset($pageFrame)) {
|
if (!isset($pageFrame)) {
|
||||||
$pageFrame = new Frame();
|
$pageFrame = new Frame();
|
||||||
$frame->add($pageFrame);
|
$frame->add($pageFrame);
|
||||||
@ -245,6 +234,16 @@ class HelpManager implements CommandListener, CallbackListener {
|
|||||||
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'HelpAllList');
|
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'HelpAllList');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows a ManiaLink list of Admin Commands
|
||||||
|
*
|
||||||
|
* @param array $chat
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function command_adminHelpAll(array $chat, Player $player) {
|
||||||
|
$this->prepareHelpAll($this->adminCommands, $player);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a new Command
|
* Registers a new Command
|
||||||
*
|
*
|
||||||
@ -254,7 +253,7 @@ class HelpManager implements CommandListener, CallbackListener {
|
|||||||
* @param $method
|
* @param $method
|
||||||
*/
|
*/
|
||||||
public function registerCommand($name, $adminCommand = false, $description = '', $method) {
|
public function registerCommand($name, $adminCommand = false, $description = '', $method) {
|
||||||
if($adminCommand) {
|
if ($adminCommand) {
|
||||||
array_push($this->adminCommands, array("Name" => $name, "Description" => $description, "Method" => $method));
|
array_push($this->adminCommands, array("Name" => $name, "Description" => $description, "Method" => $method));
|
||||||
} else {
|
} else {
|
||||||
array_push($this->playerCommands, array("Name" => $name, "Description" => $description, "Method" => $method));
|
array_push($this->playerCommands, array("Name" => $name, "Description" => $description, "Method" => $method));
|
||||||
|
@ -23,8 +23,8 @@ use ManiaControl\Players\Player;
|
|||||||
/**
|
/**
|
||||||
* Class managing ingame ManiaControl Configuration
|
* Class managing ingame ManiaControl Configuration
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class Configurator implements CallbackListener, CommandListener, ManialinkPageAnswerListener {
|
class Configurator implements CallbackListener, CommandListener, ManialinkPageAnswerListener {
|
||||||
@ -100,17 +100,13 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle Config Admin Command
|
* Add Menu Item to the Actions Menu
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
*/
|
||||||
public function handleConfigCommand(array $callback, Player $player) {
|
private function addActionsMenuItem() {
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_OPEN_CONFIGURATOR)) {
|
$itemQuad = new Quad_UIConstruction_Buttons();
|
||||||
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
$itemQuad->setSubStyle($itemQuad::SUBSTYLE_Tools);
|
||||||
return;
|
$itemQuad->setAction(self::ACTION_TOGGLEMENU);
|
||||||
}
|
$this->maniaControl->actionsMenu->addAdminMenuItem($itemQuad, 100, 'Settings');
|
||||||
|
|
||||||
$this->showMenu($player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -123,45 +119,18 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reopens the Menu
|
* Handle Config Admin Command
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function reopenMenu($player, $menuId = 0) {
|
|
||||||
$this->showMenu($player, $menuId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle toggle menu action
|
|
||||||
*
|
*
|
||||||
* @param array $callback
|
* @param array $callback
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
*/
|
*/
|
||||||
public function handleToggleMenuAction(array $callback, Player $player) {
|
public function handleConfigCommand(array $callback, Player $player) {
|
||||||
$this->toggleMenu($player);
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_OPEN_CONFIGURATOR)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
$this->showMenu($player);
|
||||||
* Save the config data received from the manialink
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function handleSaveConfigAction(array $callback, Player $player) {
|
|
||||||
foreach($this->menus as $menu) {
|
|
||||||
/** @var ConfiguratorMenu $menu */
|
|
||||||
$menu->saveConfigData($callback[1], $player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle PlayerDisconnect callback
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function handlePlayerDisconnect(array $callback) {
|
|
||||||
$login = $callback[1][0];
|
|
||||||
unset($this->playersMenuShown[$login]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -177,73 +146,10 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unset the player if he opened another Main Widget
|
* Build Menu ManiaLink if necessary
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
* @param $openedWidget
|
|
||||||
*/
|
|
||||||
public function handleWidgetOpened(Player $player, $openedWidget) {
|
|
||||||
//unset when another main widget got opened
|
|
||||||
if ($openedWidget != 'Configurator') {
|
|
||||||
unset($this->playersMenuShown[$player->login]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Widget get closed -> unset player
|
|
||||||
*
|
|
||||||
* @param \ManiaControl\Players\Player $player
|
|
||||||
*/
|
|
||||||
public function closeWidget(Player $player) {
|
|
||||||
unset($this->playersMenuShown[$player->login]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hide the Menu for the Player
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function hideMenu(Player $player) {
|
|
||||||
unset($this->playersMenuShown[$player->login]);
|
|
||||||
$this->maniaControl->manialinkManager->closeWidget($player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Toggle the Menu for the Player
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function toggleMenu(Player $player) {
|
|
||||||
if (isset($this->playersMenuShown[$player->login])) {
|
|
||||||
$this->hideMenu($player);
|
|
||||||
} else {
|
|
||||||
$this->showMenu($player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the Menu Id
|
|
||||||
*
|
|
||||||
* @param $name
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getMenuId($name) {
|
|
||||||
$i = 0;
|
|
||||||
foreach($this->menus as $menu) {
|
|
||||||
/** @var ConfiguratorMenu $menu */
|
|
||||||
if ($menu == $name || $menu->getTitle() == $name) {
|
|
||||||
return $i;
|
|
||||||
}
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build menu manialink if necessary
|
|
||||||
*
|
*
|
||||||
* @param int $menuIdShown
|
* @param int $menuIdShown
|
||||||
* @internal param bool $forceBuild
|
* @param Player $player
|
||||||
* @return \FML\ManiaLink
|
* @return \FML\ManiaLink
|
||||||
*/
|
*/
|
||||||
private function buildManialink($menuIdShown = 0, Player $player) {
|
private function buildManialink($menuIdShown = 0, Player $player) {
|
||||||
@ -291,7 +197,7 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
|
|||||||
|
|
||||||
$menuItemY = $menuHeight * 0.42;
|
$menuItemY = $menuHeight * 0.42;
|
||||||
$menuId = 0;
|
$menuId = 0;
|
||||||
foreach($this->menus as $menu) {
|
foreach ($this->menus as $menu) {
|
||||||
/** @var ConfiguratorMenu $menu */
|
/** @var ConfiguratorMenu $menu */
|
||||||
|
|
||||||
// Add title
|
// Add title
|
||||||
@ -347,6 +253,112 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
|
|||||||
return $manialink;
|
return $manialink;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reopen the Menu
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @param int $menuId
|
||||||
|
*/
|
||||||
|
public function reopenMenu(Player $player, $menuId = 0) {
|
||||||
|
$this->showMenu($player, $menuId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle toggle menu action
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function handleToggleMenuAction(array $callback, Player $player) {
|
||||||
|
$this->toggleMenu($player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle the Menu for the Player
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function toggleMenu(Player $player) {
|
||||||
|
if (isset($this->playersMenuShown[$player->login])) {
|
||||||
|
$this->hideMenu($player);
|
||||||
|
} else {
|
||||||
|
$this->showMenu($player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hide the Menu for the Player
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function hideMenu(Player $player) {
|
||||||
|
unset($this->playersMenuShown[$player->login]);
|
||||||
|
$this->maniaControl->manialinkManager->closeWidget($player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the config data received from the manialink
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function handleSaveConfigAction(array $callback, Player $player) {
|
||||||
|
foreach ($this->menus as $menu) {
|
||||||
|
/** @var ConfiguratorMenu $menu */
|
||||||
|
$menu->saveConfigData($callback[1], $player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle PlayerDisconnect callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function handlePlayerDisconnect(array $callback) {
|
||||||
|
$login = $callback[1][0];
|
||||||
|
unset($this->playersMenuShown[$login]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unset the player if he opened another Main Widget
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @param $openedWidget
|
||||||
|
*/
|
||||||
|
public function handleWidgetOpened(Player $player, $openedWidget) {
|
||||||
|
//unset when another main widget got opened
|
||||||
|
if ($openedWidget != 'Configurator') {
|
||||||
|
unset($this->playersMenuShown[$player->login]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Widget get closed -> unset player
|
||||||
|
*
|
||||||
|
* @param \ManiaControl\Players\Player $player
|
||||||
|
*/
|
||||||
|
public function closeWidget(Player $player) {
|
||||||
|
unset($this->playersMenuShown[$player->login]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Menu Id
|
||||||
|
*
|
||||||
|
* @param $name
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getMenuId($name) {
|
||||||
|
$i = 0;
|
||||||
|
foreach ($this->menus as $menu) {
|
||||||
|
/** @var ConfiguratorMenu $menu */
|
||||||
|
if ($menu == $name || $menu->getTitle() == $name) {
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle ManialinkPageAnswer Callback
|
* Handle ManialinkPageAnswer Callback
|
||||||
*
|
*
|
||||||
@ -365,14 +377,4 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
|
|||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
$this->showMenu($player, intval($actionArray[2]));
|
$this->showMenu($player, intval($actionArray[2]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Add Menu Item to the Actions Menu
|
|
||||||
*/
|
|
||||||
private function addActionsMenuItem() {
|
|
||||||
$itemQuad = new Quad_UIConstruction_Buttons();
|
|
||||||
$itemQuad->setSubStyle($itemQuad::SUBSTYLE_Tools);
|
|
||||||
$itemQuad->setAction(self::ACTION_TOGGLEMENU);
|
|
||||||
$this->maniaControl->actionsMenu->addAdminMenuItem($itemQuad, 100, 'Settings');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@ use ManiaControl\Players\Player;
|
|||||||
/**
|
/**
|
||||||
* Interface for Configurator Menus
|
* Interface for Configurator Menus
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
interface ConfiguratorMenu {
|
interface ConfiguratorMenu {
|
||||||
|
@ -5,6 +5,7 @@ namespace ManiaControl\Configurators;
|
|||||||
use FML\Controls\Control;
|
use FML\Controls\Control;
|
||||||
use FML\Controls\Entry;
|
use FML\Controls\Entry;
|
||||||
use FML\Controls\Frame;
|
use FML\Controls\Frame;
|
||||||
|
use FML\Controls\Labels\Label_Button;
|
||||||
use FML\Controls\Labels\Label_Text;
|
use FML\Controls\Labels\Label_Text;
|
||||||
use FML\Controls\Quads\Quad_Icons64x64_1;
|
use FML\Controls\Quads\Quad_Icons64x64_1;
|
||||||
use FML\Script\Features\Paging;
|
use FML\Script\Features\Paging;
|
||||||
@ -15,14 +16,13 @@ use ManiaControl\Callbacks\CallbackManager;
|
|||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
use ManiaControl\Players\Player;
|
use ManiaControl\Players\Player;
|
||||||
use ManiaControl\Players\PlayerManager;
|
use ManiaControl\Players\PlayerManager;
|
||||||
use FML\Controls\Labels\Label_Button;
|
|
||||||
use ManiaControl\Settings\SettingManager;
|
use ManiaControl\Settings\SettingManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class offering a Configurator for ManiaControl Settings
|
* Class offering a Configurator for ManiaControl Settings
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
|
class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
|
||||||
@ -67,115 +67,16 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Menu Title
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getTitle() {
|
|
||||||
return self::TITLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
|
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
|
||||||
*/
|
*/
|
||||||
public function getMenu($width, $height, Script $script, Player $player) {
|
public function getMenu($width, $height, Script $script, Player $player) {
|
||||||
if (isset($this->playersSettingCategoryOpened[$player->login]) && strlen($this->playersSettingCategoryOpened[$player->login]) > 0) {
|
if (isset($this->playersSettingCategoryOpened[$player->login]) && strlen($this->playersSettingCategoryOpened[$player->login]) > 0) {
|
||||||
return $this->getMenuSettingsForClass($this->playersSettingCategoryOpened[$player->login], $width, $height, $script, $player);
|
return $this->getMenuSettingsForClass($this->playersSettingCategoryOpened[$player->login], $width, $height, $script, $player);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return $this->getMenuSettingClasses($width, $height, $script, $player);
|
return $this->getMenuSettingClasses($width, $height, $script, $player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Menu showing all possible Classes
|
|
||||||
*
|
|
||||||
* @param float $width
|
|
||||||
* @param float $height
|
|
||||||
* @param Script $script
|
|
||||||
* @param Player $player
|
|
||||||
* @return \FML\Controls\Frame
|
|
||||||
*/
|
|
||||||
private function getMenuSettingClasses($width, $height, Script $script, Player $player) {
|
|
||||||
$settingClasses = $this->maniaControl->settingManager->getSettingClasses(true);
|
|
||||||
|
|
||||||
$paging = new Paging();
|
|
||||||
$script->addFeature($paging);
|
|
||||||
$frame = new Frame();
|
|
||||||
|
|
||||||
// Config
|
|
||||||
$pagerSize = 9.;
|
|
||||||
$settingHeight = 5.;
|
|
||||||
$pageMaxCount = 13;
|
|
||||||
$y = 0;
|
|
||||||
|
|
||||||
// Pagers
|
|
||||||
$pagerPrev = new Quad_Icons64x64_1();
|
|
||||||
$frame->add($pagerPrev);
|
|
||||||
$pagerPrev->setPosition($width * 0.39, $height * -0.44, 2);
|
|
||||||
$pagerPrev->setSize($pagerSize, $pagerSize);
|
|
||||||
$pagerPrev->setSubStyle($pagerPrev::SUBSTYLE_ArrowPrev);
|
|
||||||
|
|
||||||
$pagerNext = new Quad_Icons64x64_1();
|
|
||||||
$frame->add($pagerNext);
|
|
||||||
$pagerNext->setPosition($width * 0.45, $height * -0.44, 2);
|
|
||||||
$pagerNext->setSize($pagerSize, $pagerSize);
|
|
||||||
$pagerNext->setSubStyle($pagerNext::SUBSTYLE_ArrowNext);
|
|
||||||
|
|
||||||
$paging->addButton($pagerNext);
|
|
||||||
$paging->addButton($pagerPrev);
|
|
||||||
|
|
||||||
$pageCountLabel = new Label_Text();
|
|
||||||
$frame->add($pageCountLabel);
|
|
||||||
$pageCountLabel->setHAlign($pageCountLabel::RIGHT);
|
|
||||||
$pageCountLabel->setPosition($width * 0.35, $height * -0.44, 1);
|
|
||||||
$pageCountLabel->setStyle($pageCountLabel::STYLE_TextTitle1);
|
|
||||||
$pageCountLabel->setTextSize(2);
|
|
||||||
|
|
||||||
$paging->setLabel($pageCountLabel);
|
|
||||||
|
|
||||||
$pageFrame = null;
|
|
||||||
$index = 0;
|
|
||||||
foreach ($settingClasses as $settingClass) {
|
|
||||||
if (!$pageFrame) {
|
|
||||||
$pageFrame = new Frame();
|
|
||||||
$frame->add($pageFrame);
|
|
||||||
$y = $height * 0.41;
|
|
||||||
$paging->addPage($pageFrame);
|
|
||||||
}
|
|
||||||
|
|
||||||
$classLabel = new Label_Text();
|
|
||||||
|
|
||||||
$settingClassArray = explode('\\', $settingClass);
|
|
||||||
$className = "";
|
|
||||||
for($i = 1; $i < count($settingClassArray); $i++){
|
|
||||||
$className .= $settingClassArray[$i] . " - ";
|
|
||||||
}
|
|
||||||
$className = substr($className, 0, -3);
|
|
||||||
|
|
||||||
$pageFrame->add($classLabel);
|
|
||||||
$classLabel->setHAlign($classLabel::LEFT);
|
|
||||||
$classLabel->setPosition($width * -0.45, $y);
|
|
||||||
$classLabel->setSize($width * 0.9, $settingHeight * 0.9);
|
|
||||||
$classLabel->setStyle($classLabel::STYLE_TextCardSmall);
|
|
||||||
$classLabel->setTextSize(2);
|
|
||||||
$classLabel->setText($className);
|
|
||||||
$classLabel->setTextColor('fff');
|
|
||||||
$classLabel->setAction(self::ACTION_PREFIX_SETTINGCLASS . $settingClass);
|
|
||||||
|
|
||||||
$y -= $settingHeight;
|
|
||||||
|
|
||||||
if ($index % $pageMaxCount == $pageMaxCount - 1) {
|
|
||||||
$pageFrame = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Menu showing the Settings for the given Class
|
* Get the Menu showing the Settings for the given Class
|
||||||
*
|
*
|
||||||
@ -280,8 +181,7 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
$quad->setSubStyle(($setting->value ? $quad::SUBSTYLE_LvlGreen : $quad::SUBSTYLE_LvlRed));
|
$quad->setSubStyle(($setting->value ? $quad::SUBSTYLE_LvlGreen : $quad::SUBSTYLE_LvlRed));
|
||||||
$quad->setSize(4, 4);
|
$quad->setSize(4, 4);
|
||||||
$quad->setAction(self::ACTION_SETTING_BOOL . $setting->index);
|
$quad->setAction(self::ACTION_SETTING_BOOL . $setting->index);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$entry = new Entry();
|
$entry = new Entry();
|
||||||
$settingFrame->add($entry);
|
$settingFrame->add($entry);
|
||||||
$entry->setStyle(Label_Text::STYLE_TextValueSmall);
|
$entry->setStyle(Label_Text::STYLE_TextValueSmall);
|
||||||
@ -303,6 +203,163 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
return $frame;
|
return $frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Menu showing all possible Classes
|
||||||
|
*
|
||||||
|
* @param float $width
|
||||||
|
* @param float $height
|
||||||
|
* @param Script $script
|
||||||
|
* @param Player $player
|
||||||
|
* @return \FML\Controls\Frame
|
||||||
|
*/
|
||||||
|
private function getMenuSettingClasses($width, $height, Script $script, Player $player) {
|
||||||
|
$settingClasses = $this->maniaControl->settingManager->getSettingClasses(true);
|
||||||
|
|
||||||
|
$paging = new Paging();
|
||||||
|
$script->addFeature($paging);
|
||||||
|
$frame = new Frame();
|
||||||
|
|
||||||
|
// Config
|
||||||
|
$pagerSize = 9.;
|
||||||
|
$settingHeight = 5.;
|
||||||
|
$pageMaxCount = 13;
|
||||||
|
$y = 0;
|
||||||
|
|
||||||
|
// Pagers
|
||||||
|
$pagerPrev = new Quad_Icons64x64_1();
|
||||||
|
$frame->add($pagerPrev);
|
||||||
|
$pagerPrev->setPosition($width * 0.39, $height * -0.44, 2);
|
||||||
|
$pagerPrev->setSize($pagerSize, $pagerSize);
|
||||||
|
$pagerPrev->setSubStyle($pagerPrev::SUBSTYLE_ArrowPrev);
|
||||||
|
|
||||||
|
$pagerNext = new Quad_Icons64x64_1();
|
||||||
|
$frame->add($pagerNext);
|
||||||
|
$pagerNext->setPosition($width * 0.45, $height * -0.44, 2);
|
||||||
|
$pagerNext->setSize($pagerSize, $pagerSize);
|
||||||
|
$pagerNext->setSubStyle($pagerNext::SUBSTYLE_ArrowNext);
|
||||||
|
|
||||||
|
$paging->addButton($pagerNext);
|
||||||
|
$paging->addButton($pagerPrev);
|
||||||
|
|
||||||
|
$pageCountLabel = new Label_Text();
|
||||||
|
$frame->add($pageCountLabel);
|
||||||
|
$pageCountLabel->setHAlign($pageCountLabel::RIGHT);
|
||||||
|
$pageCountLabel->setPosition($width * 0.35, $height * -0.44, 1);
|
||||||
|
$pageCountLabel->setStyle($pageCountLabel::STYLE_TextTitle1);
|
||||||
|
$pageCountLabel->setTextSize(2);
|
||||||
|
|
||||||
|
$paging->setLabel($pageCountLabel);
|
||||||
|
|
||||||
|
$pageFrame = null;
|
||||||
|
$index = 0;
|
||||||
|
foreach ($settingClasses as $settingClass) {
|
||||||
|
if (!$pageFrame) {
|
||||||
|
$pageFrame = new Frame();
|
||||||
|
$frame->add($pageFrame);
|
||||||
|
$y = $height * 0.41;
|
||||||
|
$paging->addPage($pageFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
$classLabel = new Label_Text();
|
||||||
|
|
||||||
|
$settingClassArray = explode('\\', $settingClass);
|
||||||
|
$className = "";
|
||||||
|
for ($i = 1; $i < count($settingClassArray); $i++) {
|
||||||
|
$className .= $settingClassArray[$i] . " - ";
|
||||||
|
}
|
||||||
|
$className = substr($className, 0, -3);
|
||||||
|
|
||||||
|
$pageFrame->add($classLabel);
|
||||||
|
$classLabel->setHAlign($classLabel::LEFT);
|
||||||
|
$classLabel->setPosition($width * -0.45, $y);
|
||||||
|
$classLabel->setSize($width * 0.9, $settingHeight * 0.9);
|
||||||
|
$classLabel->setStyle($classLabel::STYLE_TextCardSmall);
|
||||||
|
$classLabel->setTextSize(2);
|
||||||
|
$classLabel->setText($className);
|
||||||
|
$classLabel->setTextColor('fff');
|
||||||
|
$classLabel->setAction(self::ACTION_PREFIX_SETTINGCLASS . $settingClass);
|
||||||
|
|
||||||
|
$y -= $settingHeight;
|
||||||
|
|
||||||
|
if ($index % $pageMaxCount == $pageMaxCount - 1) {
|
||||||
|
$pageFrame = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle ManialinkPageAnswer Callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function handleManialinkPageAnswer(array $callback) {
|
||||||
|
$actionId = $callback[1][2];
|
||||||
|
if ($actionId === self::ACTION_SETTINGCLASS_BACK) {
|
||||||
|
// Back to classes list
|
||||||
|
$login = $callback[1][1];
|
||||||
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
|
unset($this->playersSettingCategoryOpened[$player->login]);
|
||||||
|
$menuId = $this->maniaControl->configurator->getMenuId($this);
|
||||||
|
$this->maniaControl->configurator->showMenu($player, $menuId);
|
||||||
|
} else if (strpos($actionId, self::ACTION_SETTING_BOOL) === 0) {
|
||||||
|
// Bool setting change
|
||||||
|
$settingIndex = (int)substr($actionId, strlen(self::ACTION_SETTING_BOOL));
|
||||||
|
|
||||||
|
$login = $callback[1][1];
|
||||||
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
|
|
||||||
|
// Toggle the Boolean Setting
|
||||||
|
$this->toggleBooleanSetting($settingIndex, $player);
|
||||||
|
|
||||||
|
if ($callback[1][3]) {
|
||||||
|
// Save all Changes
|
||||||
|
$this->saveConfigData($callback[1], $player);
|
||||||
|
} else {
|
||||||
|
// Reopen menu directly
|
||||||
|
$menuId = $this->maniaControl->configurator->getMenuId($this);
|
||||||
|
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
||||||
|
}
|
||||||
|
} else if (strpos($actionId, self::ACTION_PREFIX_SETTINGCLASS) === 0) {
|
||||||
|
// Setting class selected
|
||||||
|
$settingClass = substr($actionId, strlen(self::ACTION_PREFIX_SETTINGCLASS));
|
||||||
|
|
||||||
|
$login = $callback[1][1];
|
||||||
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
|
|
||||||
|
$this->playersSettingCategoryOpened[$player->login] = $settingClass;
|
||||||
|
|
||||||
|
$menuId = $this->maniaControl->configurator->getMenuId($this);
|
||||||
|
$this->maniaControl->configurator->showMenu($player, $menuId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggles a Boolean Value
|
||||||
|
*
|
||||||
|
* @param int $settingIndex
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function toggleBooleanSetting($settingIndex, Player $player) {
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_MC_SETTINGS)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$oldSetting = $this->maniaControl->settingManager->getSettingByIndex($settingIndex);
|
||||||
|
|
||||||
|
if (!isset($oldSetting)) {
|
||||||
|
var_dump('no setting ' . $settingIndex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toggle value
|
||||||
|
$this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, !$oldSetting->value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the Config Data
|
* Save the Config Data
|
||||||
*
|
*
|
||||||
@ -340,74 +397,11 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle ManialinkPageAnswer Callback
|
* Get the Menu Title
|
||||||
*
|
*
|
||||||
* @param array $callback
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function handleManialinkPageAnswer(array $callback) {
|
public function getTitle() {
|
||||||
$actionId = $callback[1][2];
|
return self::TITLE;
|
||||||
if ($actionId === self::ACTION_SETTINGCLASS_BACK) {
|
|
||||||
// Back to classes list
|
|
||||||
$login = $callback[1][1];
|
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
|
||||||
unset($this->playersSettingCategoryOpened[$player->login]);
|
|
||||||
$menuId = $this->maniaControl->configurator->getMenuId($this);
|
|
||||||
$this->maniaControl->configurator->showMenu($player, $menuId);
|
|
||||||
}
|
|
||||||
else if (strpos($actionId, self::ACTION_SETTING_BOOL) === 0) {
|
|
||||||
// Bool setting change
|
|
||||||
$settingIndex = (int) substr($actionId, strlen(self::ACTION_SETTING_BOOL));
|
|
||||||
|
|
||||||
$login = $callback[1][1];
|
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
|
||||||
|
|
||||||
// Toggle the Boolean Setting
|
|
||||||
$this->toggleBooleanSetting($settingIndex, $player);
|
|
||||||
|
|
||||||
if ($callback[1][3]) {
|
|
||||||
// Save all Changes
|
|
||||||
$this->saveConfigData($callback[1], $player);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Reopen menu directly
|
|
||||||
$menuId = $this->maniaControl->configurator->getMenuId($this);
|
|
||||||
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (strpos($actionId, self::ACTION_PREFIX_SETTINGCLASS) === 0) {
|
|
||||||
// Setting class selected
|
|
||||||
$settingClass = substr($actionId, strlen(self::ACTION_PREFIX_SETTINGCLASS));
|
|
||||||
|
|
||||||
$login = $callback[1][1];
|
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
|
||||||
|
|
||||||
$this->playersSettingCategoryOpened[$player->login] = $settingClass;
|
|
||||||
|
|
||||||
$menuId = $this->maniaControl->configurator->getMenuId($this);
|
|
||||||
$this->maniaControl->configurator->showMenu($player, $menuId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Toggles a Boolean Value
|
|
||||||
*
|
|
||||||
* @param int $settingIndex
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function toggleBooleanSetting($settingIndex, Player $player) {
|
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_MC_SETTINGS)) {
|
|
||||||
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$oldSetting = $this->maniaControl->settingManager->getSettingByIndex($settingIndex);
|
|
||||||
|
|
||||||
if (!isset($oldSetting)) {
|
|
||||||
var_dump('no setting ' . $settingIndex);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Toggle value
|
|
||||||
$this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, !$oldSetting->value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
|
|||||||
/**
|
/**
|
||||||
* Class offering a Configurator for Script Settings
|
* Class offering a Configurator for Script Settings
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
||||||
@ -100,17 +100,6 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
$this->loadSettingsFromDatabase();
|
$this->loadSettingsFromDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle OnBegin Map Callback
|
|
||||||
*
|
|
||||||
* @param Map $map
|
|
||||||
*/
|
|
||||||
public function onBeginMap(Map $map) {
|
|
||||||
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_LOAD_DEFAULT_SETTINGS_MAP_BEGIN)) {
|
|
||||||
$this->loadSettingsFromDatabase();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load Settings from Database
|
* Load Settings from Database
|
||||||
*
|
*
|
||||||
@ -119,7 +108,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
public function loadSettingsFromDatabase() {
|
public function loadSettingsFromDatabase() {
|
||||||
try {
|
try {
|
||||||
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
|
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +122,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$loadedSettings = array();
|
$loadedSettings = array();
|
||||||
while($row = $result->fetch_object()) {
|
while ($row = $result->fetch_object()) {
|
||||||
if (!isset($scriptSettings[$row->settingName])) {
|
if (!isset($scriptSettings[$row->settingName])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -147,7 +136,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->setModeScriptSettings($loadedSettings);
|
$this->maniaControl->client->setModeScriptSettings($loadedSettings);
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
trigger_error('Error occurred: ' . $e->getMessage());
|
trigger_error('Error occurred: ' . $e->getMessage());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -155,10 +144,14 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
|
* Handle OnBegin Map Callback
|
||||||
|
*
|
||||||
|
* @param Map $map
|
||||||
*/
|
*/
|
||||||
public function getTitle() {
|
public function onBeginMap(Map $map) {
|
||||||
return 'Script Settings';
|
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_LOAD_DEFAULT_SETTINGS_MAP_BEGIN)) {
|
||||||
|
$this->loadSettingsFromDatabase();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -171,7 +164,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$scriptInfo = $this->maniaControl->client->getModeScriptInfo();
|
$scriptInfo = $this->maniaControl->client->getModeScriptInfo();
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
$label = new Label();
|
$label = new Label();
|
||||||
$frame->add($label);
|
$frame->add($label);
|
||||||
$label->setText($e->getMessage());
|
$label->setText($e->getMessage());
|
||||||
@ -182,7 +175,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
|
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
//do nothing
|
//do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,7 +213,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
// Setting pages
|
// Setting pages
|
||||||
$pageFrames = array();
|
$pageFrames = array();
|
||||||
$y = 0.;
|
$y = 0.;
|
||||||
foreach($scriptParams as $index => $scriptParam) {
|
foreach ($scriptParams as $index => $scriptParam) {
|
||||||
/** @var \Maniaplanet\DedicatedServer\Structures\ScriptSettings $scriptParam */
|
/** @var \Maniaplanet\DedicatedServer\Structures\ScriptSettings $scriptParam */
|
||||||
$settingName = $scriptParam->name;
|
$settingName = $scriptParam->name;
|
||||||
|
|
||||||
@ -301,50 +294,6 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
return $frame;
|
return $frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
|
|
||||||
*/
|
|
||||||
public function saveConfigData(array $configData, Player $player) {
|
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_SCRIPT_SETTINGS)) {
|
|
||||||
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!$configData[3] || strpos($configData[3][0]['Name'], self::ACTION_PREFIX_SETTING) !== 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
|
|
||||||
} catch(NotInScriptModeException $e) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$prefixLength = strlen(self::ACTION_PREFIX_SETTING);
|
|
||||||
|
|
||||||
$newSettings = array();
|
|
||||||
foreach($configData[3] as $setting) {
|
|
||||||
$settingName = substr($setting['Name'], $prefixLength + 1);
|
|
||||||
if (!isset($scriptSettings[$settingName])) {
|
|
||||||
var_dump('no setting ' . $settingName);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($setting['Value'] == $scriptSettings[$settingName]) {
|
|
||||||
// Not changed
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$newSettings[$settingName] = $setting['Value'];
|
|
||||||
settype($newSettings[$settingName], gettype($scriptSettings[$settingName]));
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->applyNewScriptSettings($newSettings, $player);
|
|
||||||
|
|
||||||
//Reopen the Menu
|
|
||||||
$menuId = $this->maniaControl->configurator->getMenuId($this->getTitle());
|
|
||||||
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle ManialinkPageAnswer Callback
|
* Handle ManialinkPageAnswer Callback
|
||||||
*
|
*
|
||||||
@ -379,7 +328,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
public function toggleBooleanSetting($setting, Player $player) {
|
public function toggleBooleanSetting($setting, Player $player) {
|
||||||
try {
|
try {
|
||||||
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
|
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -399,7 +348,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
*
|
*
|
||||||
* @param array $newSettings
|
* @param array $newSettings
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
* @param bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
private function applyNewScriptSettings(array $newSettings, Player $player) {
|
private function applyNewScriptSettings(array $newSettings, Player $player) {
|
||||||
if (!$newSettings) {
|
if (!$newSettings) {
|
||||||
@ -408,7 +357,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->setModeScriptSettings($newSettings);
|
$this->maniaControl->client->setModeScriptSettings($newSettings);
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
//TODO temp added 19.04.2014
|
//TODO temp added 19.04.2014
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 416 ScriptSettings.php" . $e->getMessage());
|
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 416 ScriptSettings.php" . $e->getMessage());
|
||||||
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
||||||
@ -436,7 +385,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
$settingIndex = 0;
|
$settingIndex = 0;
|
||||||
$title = $this->maniaControl->authenticationManager->getAuthLevelName($player->authLevel);
|
$title = $this->maniaControl->authenticationManager->getAuthLevelName($player->authLevel);
|
||||||
$chatMessage = '$ff0' . $title . ' $<' . $player->nickname . '$> set ScriptSetting' . ($settingsCount > 1 ? 's' : '') . ' ';
|
$chatMessage = '$ff0' . $title . ' $<' . $player->nickname . '$> set ScriptSetting' . ($settingsCount > 1 ? 's' : '') . ' ';
|
||||||
foreach($newSettings as $setting => $value) {
|
foreach ($newSettings as $setting => $value) {
|
||||||
$chatMessage .= '$<' . '$fff' . preg_replace('/^S_/', '', $setting) . '$z$s$ff0 ';
|
$chatMessage .= '$<' . '$fff' . preg_replace('/^S_/', '', $setting) . '$z$s$ff0 ';
|
||||||
$chatMessage .= 'to $fff' . $this->parseSettingValue($value) . '$>';
|
$chatMessage .= 'to $fff' . $this->parseSettingValue($value) . '$>';
|
||||||
|
|
||||||
@ -478,4 +427,55 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
}
|
}
|
||||||
return (string)$value;
|
return (string)$value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
|
||||||
|
*/
|
||||||
|
public function saveConfigData(array $configData, Player $player) {
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_SCRIPT_SETTINGS)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!$configData[3] || strpos($configData[3][0]['Name'], self::ACTION_PREFIX_SETTING) !== 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
|
||||||
|
} catch (NotInScriptModeException $e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$prefixLength = strlen(self::ACTION_PREFIX_SETTING);
|
||||||
|
|
||||||
|
$newSettings = array();
|
||||||
|
foreach ($configData[3] as $setting) {
|
||||||
|
$settingName = substr($setting['Name'], $prefixLength + 1);
|
||||||
|
if (!isset($scriptSettings[$settingName])) {
|
||||||
|
var_dump('no setting ' . $settingName);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($setting['Value'] == $scriptSettings[$settingName]) {
|
||||||
|
// Not changed
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$newSettings[$settingName] = $setting['Value'];
|
||||||
|
settype($newSettings[$settingName], gettype($scriptSettings[$settingName]));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->applyNewScriptSettings($newSettings, $player);
|
||||||
|
|
||||||
|
//Reopen the Menu
|
||||||
|
$menuId = $this->maniaControl->configurator->getMenuId($this->getTitle());
|
||||||
|
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
|
||||||
|
*/
|
||||||
|
public function getTitle() {
|
||||||
|
return 'Script Settings';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\LadderModeUnknownException;
|
|||||||
/**
|
/**
|
||||||
* Class offering a Configurator for Server Settings
|
* Class offering a Configurator for Server Settings
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
||||||
@ -109,7 +109,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
}
|
}
|
||||||
$serverSettings = $this->maniaControl->client->getServerOptions()->toArray();
|
$serverSettings = $this->maniaControl->client->getServerOptions()->toArray();
|
||||||
$applySettings = false;
|
$applySettings = false;
|
||||||
while($row = $result->fetch_object()) {
|
while ($row = $result->fetch_object()) {
|
||||||
if (!isset($serverSettings[$row->settingName])) {
|
if (!isset($serverSettings[$row->settingName])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -127,13 +127,6 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
|
|
||||||
*/
|
|
||||||
public function getTitle() {
|
|
||||||
return 'Server Settings';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
|
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
|
||||||
*/
|
*/
|
||||||
@ -179,7 +172,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
$pageFrames = array();
|
$pageFrames = array();
|
||||||
$y = 0.;
|
$y = 0.;
|
||||||
$id = 0;
|
$id = 0;
|
||||||
foreach($serverSettings as $name => $value) {
|
foreach ($serverSettings as $name => $value) {
|
||||||
// Continue on CurrentMaxPlayers...
|
// Continue on CurrentMaxPlayers...
|
||||||
$pos = strpos($name, "Current"); // TODO maybe display current somewhere
|
$pos = strpos($name, "Current"); // TODO maybe display current somewhere
|
||||||
if ($pos !== false) {
|
if ($pos !== false) {
|
||||||
@ -261,6 +254,25 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
return $frame;
|
return $frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle ManialinkPageAnswer Callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function handleManialinkPageAnswer(array $callback) {
|
||||||
|
$actionId = $callback[1][2];
|
||||||
|
$boolSetting = (strpos($actionId, self::ACTION_SETTING_BOOL) === 0);
|
||||||
|
if (!$boolSetting) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$login = $callback[1][1];
|
||||||
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
|
|
||||||
|
// Save all Changes
|
||||||
|
$this->saveConfigData($callback[1], $player);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
|
* @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
|
||||||
*/
|
*/
|
||||||
@ -285,7 +297,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$newSettings = array();
|
$newSettings = array();
|
||||||
foreach($configData[3] as $setting) {
|
foreach ($configData[3] as $setting) {
|
||||||
// Check if it was a boolean button
|
// Check if it was a boolean button
|
||||||
if ($setting['Name'] == $boolSettingName) {
|
if ($setting['Name'] == $boolSettingName) {
|
||||||
$setting['Value'] = ($setting['Value'] ? false : true);
|
$setting['Value'] = ($setting['Value'] ? false : true);
|
||||||
@ -304,25 +316,6 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle ManialinkPageAnswer Callback
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function handleManialinkPageAnswer(array $callback) {
|
|
||||||
$actionId = $callback[1][2];
|
|
||||||
$boolSetting = (strpos($actionId, self::ACTION_SETTING_BOOL) === 0);
|
|
||||||
if (!$boolSetting) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$login = $callback[1][1];
|
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
|
||||||
|
|
||||||
// Save all Changes
|
|
||||||
$this->saveConfigData($callback[1], $player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply the Array of new Server Settings
|
* Apply the Array of new Server Settings
|
||||||
*
|
*
|
||||||
@ -337,7 +330,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->setServerOptions($newSettings);
|
$this->maniaControl->client->setServerOptions($newSettings);
|
||||||
} catch(LadderModeUnknownException $e) {
|
} catch (LadderModeUnknownException $e) {
|
||||||
$this->maniaControl->chat->sendError("Unknown Ladder-Mode");
|
$this->maniaControl->chat->sendError("Unknown Ladder-Mode");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -359,7 +352,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($newSettings as $setting => $value) {
|
foreach ($newSettings as $setting => $value) {
|
||||||
if ($value === null) {
|
if ($value === null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -382,4 +375,11 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
|
||||||
|
*/
|
||||||
|
public function getTitle() {
|
||||||
|
return 'Server Settings';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@ use ManiaControl\ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Database Connection Class
|
* Database Connection Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class Database implements TimerListener {
|
class Database implements TimerListener {
|
||||||
@ -49,10 +49,10 @@ class Database implements TimerListener {
|
|||||||
trigger_error("Invalid database configuration (pass).", E_USER_ERROR);
|
trigger_error("Invalid database configuration (pass).", E_USER_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
$host = (string) $host[0];
|
$host = (string)$host[0];
|
||||||
$port = (int) $port[0];
|
$port = (int)$port[0];
|
||||||
$user = (string) $user[0];
|
$user = (string)$user[0];
|
||||||
$pass = (string) $pass[0];
|
$pass = (string)$pass[0];
|
||||||
|
|
||||||
// Enable mysqli Reconnect
|
// Enable mysqli Reconnect
|
||||||
ini_set('mysqli.reconnect', 'on');
|
ini_set('mysqli.reconnect', 'on');
|
||||||
@ -74,26 +74,6 @@ class Database implements TimerListener {
|
|||||||
$this->migrationHelper = new MigrationHelper($maniaControl);
|
$this->migrationHelper = new MigrationHelper($maniaControl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if Connection still exists every 5 seconds
|
|
||||||
*
|
|
||||||
* @param $time
|
|
||||||
*/
|
|
||||||
public function checkConnection($time) {
|
|
||||||
if (!$this->mysqli->ping()) {
|
|
||||||
$this->maniaControl->quit("The MySQL server has gone away");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destruct database connection
|
|
||||||
*/
|
|
||||||
public function __destruct() {
|
|
||||||
if ($this->mysqli) {
|
|
||||||
$this->mysqli->close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connect to the defined database (create it if needed)
|
* Connect to the defined database (create it if needed)
|
||||||
*
|
*
|
||||||
@ -105,11 +85,13 @@ class Database implements TimerListener {
|
|||||||
trigger_error("Invalid database configuration (database).", E_USER_ERROR);
|
trigger_error("Invalid database configuration (database).", E_USER_ERROR);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$dbName = (string) $dbName[0];
|
$dbName = (string)$dbName[0];
|
||||||
|
|
||||||
// Try to connect
|
// Try to connect
|
||||||
$result = $this->mysqli->select_db($dbName);
|
$result = $this->mysqli->select_db($dbName);
|
||||||
if ($result) return true;
|
if ($result) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Create database
|
// Create database
|
||||||
$databaseQuery = "CREATE DATABASE ?;";
|
$databaseQuery = "CREATE DATABASE ?;";
|
||||||
@ -171,4 +153,24 @@ class Database implements TimerListener {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if Connection still exists every 5 seconds
|
||||||
|
*
|
||||||
|
* @param $time
|
||||||
|
*/
|
||||||
|
public function checkConnection($time) {
|
||||||
|
if (!$this->mysqli->ping()) {
|
||||||
|
$this->maniaControl->quit("The MySQL server has gone away");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destruct database connection
|
||||||
|
*/
|
||||||
|
public function __destruct() {
|
||||||
|
if ($this->mysqli) {
|
||||||
|
$this->mysqli->close();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
namespace ManiaControl\Database;
|
namespace ManiaControl\Database;
|
||||||
|
|
||||||
use ManiaControl\Settings\SettingManager;
|
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
|
use ManiaControl\Settings\SettingManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database Migration Assistant
|
* Database Migration Assistant
|
||||||
*
|
*
|
||||||
* @author steeffeen
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class MigrationHelper {
|
class MigrationHelper {
|
||||||
@ -68,6 +68,6 @@ class MigrationHelper {
|
|||||||
if (is_object($class)) {
|
if (is_object($class)) {
|
||||||
return get_class($class);
|
return get_class($class);
|
||||||
}
|
}
|
||||||
return (string) $class;
|
return (string)$class;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@ use ManiaControl\Update\UpdateManager;
|
|||||||
/**
|
/**
|
||||||
* Error and Exception Manager Class
|
* Error and Exception Manager Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ErrorHandler {
|
class ErrorHandler {
|
||||||
@ -43,9 +43,9 @@ class ErrorHandler {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* ManiaControl ExceptionHandler
|
* ManiaControl ExceptionHandler
|
||||||
* ManiaControl Shuts down after exception
|
|
||||||
*
|
*
|
||||||
* @param \Exception $ex
|
* @param \Exception $ex
|
||||||
|
* @param bool $shutdown
|
||||||
*/
|
*/
|
||||||
public function exceptionHandler(\Exception $ex, $shutdown = true) {
|
public function exceptionHandler(\Exception $ex, $shutdown = true) {
|
||||||
// Log exception
|
// Log exception
|
||||||
@ -64,16 +64,14 @@ class ErrorHandler {
|
|||||||
|
|
||||||
if ($this->maniaControl->server) {
|
if ($this->maniaControl->server) {
|
||||||
$error['ServerLogin'] = $this->maniaControl->server->login;
|
$error['ServerLogin'] = $this->maniaControl->server->login;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$error['ServerLogin'] = '';
|
$error['ServerLogin'] = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->maniaControl->settingManager && $this->maniaControl->updateManager) {
|
if ($this->maniaControl->settingManager && $this->maniaControl->updateManager) {
|
||||||
$error['UpdateChannel'] = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_UPDATECHECK_CHANNEL);
|
$error['UpdateChannel'] = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_UPDATECHECK_CHANNEL);
|
||||||
$error['ManiaControlVersion'] = $this->maniaControl->updateManager->getNightlyBuildDate();
|
$error['ManiaControlVersion'] = $this->maniaControl->updateManager->getNightlyBuildDate();
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$error['UpdateChannel'] = '';
|
$error['UpdateChannel'] = '';
|
||||||
$error['ManiaControlVersion'] = ManiaControl::VERSION;
|
$error['ManiaControlVersion'] = ManiaControl::VERSION;
|
||||||
}
|
}
|
||||||
@ -86,8 +84,7 @@ class ErrorHandler {
|
|||||||
|
|
||||||
if (!json_decode($success)) {
|
if (!json_decode($success)) {
|
||||||
logMessage("Exception-Report failed!");
|
logMessage("Exception-Report failed!");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
logMessage("Exception successfully reported!");
|
logMessage("Exception successfully reported!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -100,6 +97,28 @@ class ErrorHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if ManiaControl should restart automatically
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function shouldRestart() {
|
||||||
|
if (!$this->maniaControl || !$this->maniaControl->settingManager) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$setting = $this->maniaControl->settingManager->getSetting($this, self::SETTING_RESTART_ON_EXCEPTION, true);
|
||||||
|
return $setting;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Triggers a Debug Notice to the ManiaControl Website
|
||||||
|
*
|
||||||
|
* @param $message
|
||||||
|
*/
|
||||||
|
public function triggerDebugNotice($message) {
|
||||||
|
$this->errorHandler(self::MC_DEBUG_NOTICE, $message);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Error Handler
|
* Error Handler
|
||||||
*
|
*
|
||||||
@ -136,16 +155,14 @@ class ErrorHandler {
|
|||||||
|
|
||||||
if ($this->maniaControl->server) {
|
if ($this->maniaControl->server) {
|
||||||
$error['ServerLogin'] = $this->maniaControl->server->login;
|
$error['ServerLogin'] = $this->maniaControl->server->login;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$error['ServerLogin'] = '';
|
$error['ServerLogin'] = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->maniaControl->settingManager && $this->maniaControl->updateManager) {
|
if ($this->maniaControl->settingManager && $this->maniaControl->updateManager) {
|
||||||
$error['UpdateChannel'] = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_UPDATECHECK_CHANNEL);
|
$error['UpdateChannel'] = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_UPDATECHECK_CHANNEL);
|
||||||
$error['ManiaControlVersion'] = ManiaControl::VERSION . '#' . $this->maniaControl->updateManager->getNightlyBuildDate();
|
$error['ManiaControlVersion'] = ManiaControl::VERSION . '#' . $this->maniaControl->updateManager->getNightlyBuildDate();
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$error['UpdateChannel'] = '';
|
$error['UpdateChannel'] = '';
|
||||||
$error['ManiaControlVersion'] = ManiaControl::VERSION;
|
$error['ManiaControlVersion'] = ManiaControl::VERSION;
|
||||||
}
|
}
|
||||||
@ -158,8 +175,7 @@ class ErrorHandler {
|
|||||||
|
|
||||||
if (!json_decode($success)) {
|
if (!json_decode($success)) {
|
||||||
logMessage("Error-Report failed!");
|
logMessage("Error-Report failed!");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
logMessage("Error successfully reported!");
|
logMessage("Error successfully reported!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -180,15 +196,6 @@ class ErrorHandler {
|
|||||||
return ($errorNumber === E_USER_ERROR || $errorNumber === E_USER_WARNING || $errorNumber === E_USER_NOTICE || $errorNumber === E_USER_DEPRECATED);
|
return ($errorNumber === E_USER_ERROR || $errorNumber === E_USER_WARNING || $errorNumber === E_USER_NOTICE || $errorNumber === E_USER_DEPRECATED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Triggers a Debug Notice to the ManiaControl Website
|
|
||||||
*
|
|
||||||
* @param $message
|
|
||||||
*/
|
|
||||||
public function triggerDebugNotice($message) {
|
|
||||||
$this->errorHandler(self::MC_DEBUG_NOTICE, $message);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Prefix for the given Error Level
|
* Get the Prefix for the given Error Level
|
||||||
*
|
*
|
||||||
@ -229,29 +236,6 @@ class ErrorHandler {
|
|||||||
return "[PHP {$errorLevel}]";
|
return "[PHP {$errorLevel}]";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Test if ManiaControl should stop its Execution
|
|
||||||
*
|
|
||||||
* @param int $errorNumber
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function shouldStopExecution($errorNumber) {
|
|
||||||
return ($errorNumber === E_ERROR || $errorNumber === E_USER_ERROR || $errorNumber === E_FATAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test if ManiaControl should restart automatically
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function shouldRestart() {
|
|
||||||
if (!$this->maniaControl || !$this->maniaControl->settingManager) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$setting = $this->maniaControl->settingManager->getSetting($this, self::SETTING_RESTART_ON_EXCEPTION, true);
|
|
||||||
return $setting;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse the Debug Backtrace into a String for the Error Report
|
* Parse the Debug Backtrace into a String for the Error Report
|
||||||
* return string
|
* return string
|
||||||
@ -282,4 +266,14 @@ class ErrorHandler {
|
|||||||
}
|
}
|
||||||
return $traceString;
|
return $traceString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if ManiaControl should stop its Execution
|
||||||
|
*
|
||||||
|
* @param int $errorNumber
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function shouldStopExecution($errorNumber) {
|
||||||
|
return ($errorNumber === E_ERROR || $errorNumber === E_USER_ERROR || $errorNumber === E_FATAL);
|
||||||
|
}
|
||||||
}
|
}
|
@ -11,8 +11,8 @@ use ManiaControl\ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Asynchronous File Reader
|
* Asynchronous File Reader
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class AsynchronousFileReader {
|
class AsynchronousFileReader {
|
||||||
@ -35,13 +35,13 @@ class AsynchronousFileReader {
|
|||||||
* Appends the Data
|
* Appends the Data
|
||||||
*/
|
*/
|
||||||
public function appendData() {
|
public function appendData() {
|
||||||
foreach($this->requests as $key => $request) {
|
foreach ($this->requests as $key => $request) {
|
||||||
/** @var Request $request */
|
/** @var Request $request */
|
||||||
try {
|
try {
|
||||||
if ($request->socketPerform()) {
|
if ($request->socketPerform()) {
|
||||||
$request->socketSelect();
|
$request->socketSelect();
|
||||||
}
|
}
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
if ($e->getMessage() == "Cannot perform if there are no requests in queue.") {
|
if ($e->getMessage() == "Cannot perform if there are no requests in queue.") {
|
||||||
unset($this->requests[$key]);
|
unset($this->requests[$key]);
|
||||||
} else {
|
} else {
|
||||||
@ -55,8 +55,9 @@ class AsynchronousFileReader {
|
|||||||
* Load a remote file
|
* Load a remote file
|
||||||
*
|
*
|
||||||
* @param string $url
|
* @param string $url
|
||||||
* @param $function
|
* @param callable $function
|
||||||
* @param string $contentType
|
* @param string $contentType
|
||||||
|
* @param int $keepAlive
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function loadFile($url, $function, $contentType = 'UTF-8', $keepAlive = 0) {
|
public function loadFile($url, $function, $contentType = 'UTF-8', $keepAlive = 0) {
|
||||||
@ -118,10 +119,10 @@ class AsynchronousFileReader {
|
|||||||
/**
|
/**
|
||||||
* Send Data via POST Method
|
* Send Data via POST Method
|
||||||
*
|
*
|
||||||
* @param $url
|
* @param string $url
|
||||||
* @param $function
|
* @param callable $function
|
||||||
* @param $content
|
* @param string $content
|
||||||
* @param string $compression
|
* @param bool $compression
|
||||||
* @param string $contentType
|
* @param string $contentType
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace ManiaControl\Files;
|
namespace ManiaControl\Files;
|
||||||
|
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Backup Utility Class
|
* Backup Utility Class
|
||||||
*
|
*
|
||||||
* @author ManiaControl Team
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
abstract class BackupUtil {
|
abstract class BackupUtil {
|
||||||
@ -25,7 +26,7 @@ abstract class BackupUtil {
|
|||||||
$backupFolder = self::getBackupFolder();
|
$backupFolder = self::getBackupFolder();
|
||||||
$backupFileName = $backupFolder . 'backup_' . ManiaControl::VERSION . '_' . date('y-m-d') . '_' . time() . '.zip';
|
$backupFileName = $backupFolder . 'backup_' . ManiaControl::VERSION . '_' . date('y-m-d') . '_' . time() . '.zip';
|
||||||
$backupZip = new \ZipArchive();
|
$backupZip = new \ZipArchive();
|
||||||
if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== TRUE) {
|
if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== true) {
|
||||||
trigger_error("Couldn't create Backup Zip!");
|
trigger_error("Couldn't create Backup Zip!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -39,29 +40,6 @@ abstract class BackupUtil {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Perform a Backup of the Plugins
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function performPluginsBackup() {
|
|
||||||
$backupFolder = self::getBackupFolder();
|
|
||||||
$backupFileName = $backupFolder . 'backup_plugins_' . date('y-m-d') . '_' . time() . '.zip';
|
|
||||||
$backupZip = new \ZipArchive();
|
|
||||||
if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== TRUE) {
|
|
||||||
trigger_error("Couldn't create Backup Zip!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$excludes = array('.', '..');
|
|
||||||
$pathInfo = pathInfo(ManiaControlDir . '/plugins');
|
|
||||||
$parentPath = $pathInfo['dirname'] . '/';
|
|
||||||
$dirName = $pathInfo['basename'];
|
|
||||||
$backupZip->addEmptyDir($dirName);
|
|
||||||
self::zipDirectory($backupZip, ManiaControlDir . '/plugins', strlen($parentPath), $excludes);
|
|
||||||
$backupZip->close();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Backup Folder Path and create it if necessary
|
* Get the Backup Folder Path and create it if necessary
|
||||||
*
|
*
|
||||||
@ -109,4 +87,27 @@ abstract class BackupUtil {
|
|||||||
closedir($folderHandle);
|
closedir($folderHandle);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a Backup of the Plugins
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function performPluginsBackup() {
|
||||||
|
$backupFolder = self::getBackupFolder();
|
||||||
|
$backupFileName = $backupFolder . 'backup_plugins_' . date('y-m-d') . '_' . time() . '.zip';
|
||||||
|
$backupZip = new \ZipArchive();
|
||||||
|
if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== true) {
|
||||||
|
trigger_error("Couldn't create Backup Zip!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$excludes = array('.', '..');
|
||||||
|
$pathInfo = pathInfo(ManiaControlDir . '/plugins');
|
||||||
|
$parentPath = $pathInfo['dirname'] . '/';
|
||||||
|
$dirName = $pathInfo['basename'];
|
||||||
|
$backupZip->addEmptyDir($dirName);
|
||||||
|
self::zipDirectory($backupZip, ManiaControlDir . '/plugins', strlen($parentPath), $excludes);
|
||||||
|
$backupZip->close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
namespace ManiaControl\Files;
|
namespace ManiaControl\Files;
|
||||||
|
|
||||||
use ManiaControl\ManiaControl;
|
|
||||||
use ManiaControl\Formatter;
|
use ManiaControl\Formatter;
|
||||||
|
use ManiaControl\ManiaControl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Files Utility Class
|
* Files Utility Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
abstract class FileUtil {
|
abstract class FileUtil {
|
||||||
@ -100,6 +100,16 @@ abstract class FileUtil {
|
|||||||
return $fileName;
|
return $fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete the Temporary Folder if it's empty
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function removeTempFolder() {
|
||||||
|
$tempFolder = self::getTempFolder(false);
|
||||||
|
return @rmdir($tempFolder);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Temporary Folder and create it if necessary
|
* Get the Temporary Folder and create it if necessary
|
||||||
*
|
*
|
||||||
@ -114,16 +124,6 @@ abstract class FileUtil {
|
|||||||
return $tempFolder;
|
return $tempFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete the Temporary Folder if it's empty
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function removeTempFolder() {
|
|
||||||
$tempFolder = self::getTempFolder(false);
|
|
||||||
return @rmdir($tempFolder);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if ManiaControl has sufficient Access to write to Files in the given Directories
|
* Check if ManiaControl has sufficient Access to write to Files in the given Directories
|
||||||
*
|
*
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Class offering Methods to format Texts and Values
|
* Class offering Methods to format Texts and Values
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
abstract class Formatter {
|
abstract class Formatter {
|
||||||
@ -68,7 +68,7 @@ abstract class Formatter {
|
|||||||
|
|
||||||
$a = array(12 * 30 * 24 * 60 * 60 => 'year', 30 * 24 * 60 * 60 => 'month', 24 * 60 * 60 => 'day', 60 * 60 => 'hour', 60 => 'minute', 1 => 'second');
|
$a = array(12 * 30 * 24 * 60 * 60 => 'year', 30 * 24 * 60 * 60 => 'month', 24 * 60 * 60 => 'day', 60 * 60 => 'hour', 60 => 'minute', 1 => 'second');
|
||||||
|
|
||||||
foreach($a as $secs => $str) {
|
foreach ($a as $secs => $str) {
|
||||||
$d = $etime / $secs;
|
$d = $etime / $secs;
|
||||||
if ($d >= 1) {
|
if ($d >= 1) {
|
||||||
$r = round($d);
|
$r = round($d);
|
||||||
@ -111,6 +111,16 @@ abstract class Formatter {
|
|||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove Links from the String
|
||||||
|
*
|
||||||
|
* @param string $string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function stripLinks($string) {
|
||||||
|
return preg_replace('/(?<!\$)((?:\$\$)*)\$[hlp](?:\[.*?\])?(.*?)(?:\$[hlp]|(\$z)|$)/iu', '$1$2$3', $string);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove all Codes from the String
|
* Remove all Codes from the String
|
||||||
*
|
*
|
||||||
@ -124,16 +134,6 @@ abstract class Formatter {
|
|||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove Links from the String
|
|
||||||
*
|
|
||||||
* @param string $string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function stripLinks($string) {
|
|
||||||
return preg_replace('/(?<!\$)((?:\$\$)*)\$[hlp](?:\[.*?\])?(.*?)(?:\$[hlp]|(\$z)|$)/iu', '$1$2$3', $string);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove Colors from the String
|
* Remove Colors from the String
|
||||||
*
|
*
|
||||||
|
@ -11,6 +11,7 @@ use ManiaControl\Callbacks\TimerManager;
|
|||||||
use ManiaControl\Commands\CommandListener;
|
use ManiaControl\Commands\CommandListener;
|
||||||
use ManiaControl\Commands\CommandManager;
|
use ManiaControl\Commands\CommandManager;
|
||||||
use ManiaControl\Configurators\Configurator;
|
use ManiaControl\Configurators\Configurator;
|
||||||
|
use ManiaControl\Database\Database;
|
||||||
use ManiaControl\Files\AsynchronousFileReader;
|
use ManiaControl\Files\AsynchronousFileReader;
|
||||||
use ManiaControl\Files\FileUtil;
|
use ManiaControl\Files\FileUtil;
|
||||||
use ManiaControl\Manialinks\ManialinkManager;
|
use ManiaControl\Manialinks\ManialinkManager;
|
||||||
@ -26,7 +27,6 @@ use Maniaplanet\DedicatedServer\Connection;
|
|||||||
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
||||||
use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
|
use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
|
||||||
use Maniaplanet\DedicatedServer\Xmlrpc\TransportException;
|
use Maniaplanet\DedicatedServer\Xmlrpc\TransportException;
|
||||||
use ManiaControl\Database\Database;
|
|
||||||
|
|
||||||
require_once __DIR__ . '/Libs/Maniaplanet/DedicatedServer/Connection.php';
|
require_once __DIR__ . '/Libs/Maniaplanet/DedicatedServer/Connection.php';
|
||||||
require_once __DIR__ . '/Libs/GbxDataFetcher/gbxdatafetcher.inc.php';
|
require_once __DIR__ . '/Libs/GbxDataFetcher/gbxdatafetcher.inc.php';
|
||||||
@ -37,8 +37,8 @@ require_once __DIR__ . '/Libs/curl-easy/autoload.php';
|
|||||||
/**
|
/**
|
||||||
* ManiaControl Server Controller for ManiaPlanet Server
|
* ManiaControl Server Controller for ManiaPlanet Server
|
||||||
*
|
*
|
||||||
* @author ManiaControl Team
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ManiaControl implements CommandListener, TimerListener {
|
class ManiaControl implements CommandListener, TimerListener {
|
||||||
@ -66,7 +66,6 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
public $config = null;
|
public $config = null;
|
||||||
public $configurator = null;
|
public $configurator = null;
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var Connection $client
|
* @var Connection $client
|
||||||
*/
|
*/
|
||||||
public $client = null;
|
public $client = null;
|
||||||
@ -137,6 +136,19 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
$this->errorHandler->init();
|
$this->errorHandler->init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Print a message to console and log
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param bool $stripCodes
|
||||||
|
*/
|
||||||
|
public function log($message, $stripCodes = false) {
|
||||||
|
if ($stripCodes) {
|
||||||
|
$message = Formatter::stripCodes($message);
|
||||||
|
}
|
||||||
|
logMessage($message);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the Config XML-File
|
* Load the Config XML-File
|
||||||
*/
|
*/
|
||||||
@ -163,40 +175,6 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a message to console and log
|
|
||||||
*
|
|
||||||
* @param string $message
|
|
||||||
*/
|
|
||||||
public function log($message, $stripCodes = false) {
|
|
||||||
if ($stripCodes) {
|
|
||||||
$message = Formatter::stripCodes($message);
|
|
||||||
}
|
|
||||||
logMessage($message);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Operating System on which ManiaControl is running
|
|
||||||
*
|
|
||||||
* @param string $compareOS
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getOS($compareOS = null) {
|
|
||||||
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
|
|
||||||
if ($compareOS) {
|
|
||||||
// Return bool whether OS equals $compareOS
|
|
||||||
if ($compareOS == self::OS_WIN) {
|
|
||||||
return $windows;
|
|
||||||
}
|
|
||||||
return !$windows;
|
|
||||||
}
|
|
||||||
// Return OS
|
|
||||||
if ($windows) {
|
|
||||||
return self::OS_WIN;
|
|
||||||
}
|
|
||||||
return self::OS_UNIX;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle Version Command
|
* Handle Version Command
|
||||||
*
|
*
|
||||||
@ -222,6 +200,60 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
$this->restart("ManiaControl Restart requested by '{$player->login}'!");
|
$this->restart("ManiaControl Restart requested by '{$player->login}'!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restart ManiaControl
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
*/
|
||||||
|
public function restart($message = null) {
|
||||||
|
// Shutdown callback
|
||||||
|
$this->callbackManager->triggerCallback(CallbackManager::CB_ONSHUTDOWN);
|
||||||
|
|
||||||
|
// Announce restart
|
||||||
|
$this->chat->sendInformation('Restarting ManiaControl...');
|
||||||
|
if ($message) {
|
||||||
|
$this->log($message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hide widgets
|
||||||
|
$this->client->sendHideManialinkPage();
|
||||||
|
|
||||||
|
$this->log('Restarting ManiaControl!');
|
||||||
|
|
||||||
|
// Execute start script in background
|
||||||
|
// TODO: restart the .php script itself ($_SERVER['scriptname'] or something + $argv)
|
||||||
|
if ($this->getOS(self::OS_UNIX)) {
|
||||||
|
$command = 'sh ' . escapeshellarg(ManiaControlDir . '/ManiaControl.sh') . ' > /dev/null &';
|
||||||
|
exec($command);
|
||||||
|
} else {
|
||||||
|
$command = escapeshellarg(ManiaControlDir . "\ManiaControl.bat");
|
||||||
|
system($command); // TODO, windows stucks here as long controller is running
|
||||||
|
}
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Operating System on which ManiaControl is running
|
||||||
|
*
|
||||||
|
* @param string $compareOS
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getOS($compareOS = null) {
|
||||||
|
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
|
||||||
|
if ($compareOS) {
|
||||||
|
// Return bool whether OS equals $compareOS
|
||||||
|
if ($compareOS == self::OS_WIN) {
|
||||||
|
return $windows;
|
||||||
|
}
|
||||||
|
return !$windows;
|
||||||
|
}
|
||||||
|
// Return OS
|
||||||
|
if ($windows) {
|
||||||
|
return self::OS_WIN;
|
||||||
|
}
|
||||||
|
return self::OS_UNIX;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle //shutdown command
|
* Handle //shutdown command
|
||||||
*
|
*
|
||||||
@ -265,8 +297,7 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
$this->client->sendHideManialinkPage();
|
$this->client->sendHideManialinkPage();
|
||||||
// Close the client connection
|
// Close the client connection
|
||||||
$this->client->delete($this->server->ip, $this->server->port);
|
$this->client->delete($this->server->ip, $this->server->port);
|
||||||
}
|
} catch (TransportException $e) {
|
||||||
catch (TransportException $e) {
|
|
||||||
$this->errorHandler->triggerDebugNotice($e->getMessage() . " File: " . $e->getFile() . " Line: " . $e->getLine());
|
$this->errorHandler->triggerDebugNotice($e->getMessage() . " File: " . $e->getFile() . " Line: " . $e->getLine());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -286,36 +317,10 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restart ManiaControl
|
* Collect Garbage
|
||||||
*
|
|
||||||
* @param string $message
|
|
||||||
*/
|
*/
|
||||||
public function restart($message = null) {
|
public function collectGarbage() {
|
||||||
// Shutdown callback
|
gc_collect_cycles();
|
||||||
$this->callbackManager->triggerCallback(CallbackManager::CB_ONSHUTDOWN);
|
|
||||||
|
|
||||||
// Announce restart
|
|
||||||
$this->chat->sendInformation('Restarting ManiaControl...');
|
|
||||||
if ($message) {
|
|
||||||
$this->log($message);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hide widgets
|
|
||||||
$this->client->sendHideManialinkPage();
|
|
||||||
|
|
||||||
$this->log('Restarting ManiaControl!');
|
|
||||||
|
|
||||||
// Execute start script in background
|
|
||||||
// TODO: restart the .php script itself ($_SERVER['scriptname'] or something + $argv)
|
|
||||||
if ($this->getOS(self::OS_UNIX)) {
|
|
||||||
$command = 'sh ' . escapeshellarg(ManiaControlDir . '/ManiaControl.sh') . ' > /dev/null &';
|
|
||||||
exec($command);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$command = escapeshellarg(ManiaControlDir . "\ManiaControl.bat");
|
|
||||||
system($command); // TODO, windows stucks here as long controller is running
|
|
||||||
}
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -367,8 +372,7 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
try {
|
try {
|
||||||
// Manager callbacks
|
// Manager callbacks
|
||||||
$this->callbackManager->manageCallbacks();
|
$this->callbackManager->manageCallbacks();
|
||||||
}
|
} catch (TransportException $e) {
|
||||||
catch (TransportException $e) {
|
|
||||||
$this->log("Connection interrupted!");
|
$this->log("Connection interrupted!");
|
||||||
// TODO remove
|
// TODO remove
|
||||||
if ($this->errorHandler) {
|
if ($this->errorHandler) {
|
||||||
@ -383,7 +387,7 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
// Yield for next tick
|
// Yield for next tick
|
||||||
$loopEnd = microtime(true);
|
$loopEnd = microtime(true);
|
||||||
|
|
||||||
$sleepTime = (int) (2000 - ($loopEnd - $loopStart) * 1000000);
|
$sleepTime = (int)(2000 - ($loopEnd - $loopStart) * 1000000);
|
||||||
if ($sleepTime > 0) {
|
if ($sleepTime > 0) {
|
||||||
usleep($sleepTime);
|
usleep($sleepTime);
|
||||||
}
|
}
|
||||||
@ -393,13 +397,6 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
$this->quit();
|
$this->quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Collect Garbage
|
|
||||||
*/
|
|
||||||
public function collectGarbage() {
|
|
||||||
gc_collect_cycles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connect to ManiaPlanet server
|
* Connect to ManiaPlanet server
|
||||||
*/
|
*/
|
||||||
@ -411,8 +408,7 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->client = Connection::factory($this->server->config->host, $this->server->config->port, self::CONNECT_TIMEOUT, $this->server->config->login, $this->server->config->pass);
|
$this->client = Connection::factory($this->server->config->host, $this->server->config->port, self::CONNECT_TIMEOUT, $this->server->config->login, $this->server->config->pass);
|
||||||
}
|
} catch (Exception $e) {
|
||||||
catch (Exception $e) {
|
|
||||||
trigger_error("Couldn't authenticate on server with user '{$this->server->config->login}'! " . $e->getMessage(), E_USER_ERROR);
|
trigger_error("Couldn't authenticate on server with user '{$this->server->config->login}'! " . $e->getMessage(), E_USER_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,8 +420,7 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
if (!$this->server->waitForStatus(4)) {
|
if (!$this->server->waitForStatus(4)) {
|
||||||
trigger_error("Server couldn't get ready!", E_USER_ERROR);
|
trigger_error("Server couldn't get ready!", E_USER_ERROR);
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception $e) {
|
||||||
catch (Exception $e) {
|
|
||||||
// TODO remove
|
// TODO remove
|
||||||
if ($this->errorHandler) {
|
if ($this->errorHandler) {
|
||||||
$this->errorHandler->triggerDebugNotice("Fatal Exception: " . $e->getMessage() . " Trace: " . $e->getTraceAsString());
|
$this->errorHandler->triggerDebugNotice("Fatal Exception: " . $e->getMessage() . " Trace: " . $e->getTraceAsString());
|
||||||
@ -446,8 +441,7 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$scriptSettings = $this->client->getModeScriptSettings();
|
$scriptSettings = $this->client->getModeScriptSettings();
|
||||||
}
|
} catch (NotInScriptModeException $e) {
|
||||||
catch (NotInScriptModeException $e) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,8 +452,7 @@ class ManiaControl implements CommandListener, TimerListener {
|
|||||||
$scriptSettings['S_UseScriptCallbacks'] = true;
|
$scriptSettings['S_UseScriptCallbacks'] = true;
|
||||||
try {
|
try {
|
||||||
$this->client->setModeScriptSettings($scriptSettings);
|
$this->client->setModeScriptSettings($scriptSettings);
|
||||||
}
|
} catch (Exception $e) {
|
||||||
catch (Exception $e) {
|
|
||||||
// TODO temp added 19.04.2014
|
// TODO temp added 19.04.2014
|
||||||
$this->errorHandler->triggerDebugNotice("Exception line 437 ManiaControl.php " . $e->getMessage());
|
$this->errorHandler->triggerDebugNotice("Exception line 437 ManiaControl.php " . $e->getMessage());
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ use ManiaControl\Formatter;
|
|||||||
* Mania Exchange Map Info Object
|
* Mania Exchange Map Info Object
|
||||||
*
|
*
|
||||||
* @author Xymph
|
* @author Xymph
|
||||||
* @updated kremsy
|
* @updated kremsy <kremsy@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class MXMapInfo {
|
class MXMapInfo {
|
||||||
@ -19,6 +19,7 @@ class MXMapInfo {
|
|||||||
public $replaytyp, $replayid, $replaycnt, $acomment, $awards, $comments;
|
public $replaytyp, $replayid, $replaycnt, $acomment, $awards, $comments;
|
||||||
public $pageurl, $replayurl, $imageurl, $thumburl, $downloadurl, $dir;
|
public $pageurl, $replayurl, $imageurl, $thumburl, $downloadurl, $dir;
|
||||||
public $ratingVoteCount, $ratingVoteAverage;
|
public $ratingVoteCount, $ratingVoteAverage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns map object with all available data from MX map data
|
* Returns map object with all available data from MX map data
|
||||||
*
|
*
|
||||||
|
@ -29,8 +29,8 @@ use ManiaControl\Players\Player;
|
|||||||
/**
|
/**
|
||||||
* ManiaExchange List Widget Class
|
* ManiaExchange List Widget Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener {
|
class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener {
|
||||||
@ -66,6 +66,33 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
|
|||||||
$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_SEARCH_AUTHOR, $this, 'showList');
|
$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_SEARCH_AUTHOR, $this, 'showList');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle ManialinkPageAnswer Callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function handleManialinkPageAnswer(array $callback) {
|
||||||
|
$actionId = $callback[1][2];
|
||||||
|
$actionArray = explode('.', $actionId);
|
||||||
|
if (count($actionArray) <= 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$action = $actionArray[0] . '.' . $actionArray[1];
|
||||||
|
$login = $callback[1][1];
|
||||||
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
|
$mapId = (int)$actionArray[2];
|
||||||
|
|
||||||
|
switch ($action) {
|
||||||
|
case self::ACTION_GET_MAPS_FROM_AUTHOR:
|
||||||
|
$callback[1][2] = 'auth:' . $actionArray[2];
|
||||||
|
$this->showList($callback, $player);
|
||||||
|
break;
|
||||||
|
case self::ACTION_ADD_MAP:
|
||||||
|
$this->maniaControl->mapManager->addMapFromMx($mapId, $player->login);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows the List
|
* Shows the List
|
||||||
@ -80,7 +107,7 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
|
|||||||
$author = '';
|
$author = '';
|
||||||
$environment = '';
|
$environment = '';
|
||||||
if (count($params) >= 1) {
|
if (count($params) >= 1) {
|
||||||
foreach($params as $param) {
|
foreach ($params as $param) {
|
||||||
if ($param == '/xlist' || $param == MapCommands::ACTION_OPEN_XLIST) {
|
if ($param == '/xlist' || $param == MapCommands::ACTION_OPEN_XLIST) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -151,7 +178,7 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
|
|||||||
$i = 0;
|
$i = 0;
|
||||||
$y = $height / 2 - 16;
|
$y = $height / 2 - 16;
|
||||||
$pageFrames = array();
|
$pageFrames = array();
|
||||||
foreach($maps as $map) { //TODO order possibilities
|
foreach ($maps as $map) { //TODO order possibilities
|
||||||
/** @var MxMapInfo $map */
|
/** @var MxMapInfo $map */
|
||||||
if (!isset($pageFrame)) {
|
if (!isset($pageFrame)) {
|
||||||
$pageFrame = new Frame();
|
$pageFrame = new Frame();
|
||||||
@ -179,7 +206,7 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
|
|||||||
|
|
||||||
/** @var MxMapInfo $map */
|
/** @var MxMapInfo $map */
|
||||||
$time = Formatter::time_elapsed_string(strtotime($map->updated));
|
$time = Formatter::time_elapsed_string(strtotime($map->updated));
|
||||||
$array = array('$s'. $map->id => $x + 3.5, '$s'. $map->name => $x + 12.5, '$s'. $map->author => $x + 59, '$s'. str_replace("Arena", "", $map->maptype) => $x + 103, '$s'. $map->mood => $x + 118, '$s'. $time => $x + 130);
|
$array = array('$s' . $map->id => $x + 3.5, '$s' . $map->name => $x + 12.5, '$s' . $map->author => $x + 59, '$s' . str_replace("Arena", "", $map->maptype) => $x + 103, '$s' . $map->mood => $x + 118, '$s' . $time => $x + 130);
|
||||||
$labels = $this->maniaControl->manialinkManager->labelLine($mapFrame, $array);
|
$labels = $this->maniaControl->manialinkManager->labelLine($mapFrame, $array);
|
||||||
/** @var Label_Text $authorLabel */
|
/** @var Label_Text $authorLabel */
|
||||||
$authorLabel = $labels[2];
|
$authorLabel = $labels[2];
|
||||||
@ -312,35 +339,6 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
|
|||||||
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'ManiaExchangeList');
|
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'ManiaExchangeList');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle ManialinkPageAnswer Callback
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function handleManialinkPageAnswer(array $callback) {
|
|
||||||
$actionId = $callback[1][2];
|
|
||||||
$actionArray = explode('.', $actionId);
|
|
||||||
if (count($actionArray) <= 2) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$action = $actionArray[0] . '.' . $actionArray[1];
|
|
||||||
$login = $callback[1][1];
|
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
|
||||||
$mapId = (int)$actionArray[2];
|
|
||||||
|
|
||||||
switch($action) {
|
|
||||||
case self::ACTION_GET_MAPS_FROM_AUTHOR:
|
|
||||||
$callback[1][2] = 'auth:' . $actionArray[2];
|
|
||||||
$this->showList($callback, $player);
|
|
||||||
break;
|
|
||||||
case self::ACTION_ADD_MAP:
|
|
||||||
$this->maniaControl->mapManager->addMapFromMx($mapId, $player->login);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unset the player if he opened another Main Widget
|
* Unset the player if he opened another Main Widget
|
||||||
*
|
*
|
||||||
@ -364,5 +362,4 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
|
|||||||
unset($this->mapListShown[$player->login]);
|
unset($this->mapListShown[$player->login]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -10,8 +10,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
|
|||||||
/**
|
/**
|
||||||
* Mania Exchange Info Searcher Class
|
* Mania Exchange Info Searcher Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ManiaExchangeManager {
|
class ManiaExchangeManager {
|
||||||
@ -57,49 +57,6 @@ class ManiaExchangeManager {
|
|||||||
$this->maniaControl = $maniaControl;
|
$this->maniaControl = $maniaControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store Map Info from MX and store the mxid in the database and the mx info in the map object
|
|
||||||
*
|
|
||||||
* @param $mxMapInfos
|
|
||||||
*/
|
|
||||||
public function updateMapObjectsWithManiaExchangeIds($mxMapInfos) {
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
// Save map data
|
|
||||||
$saveMapQuery = "UPDATE `" . MapManager::TABLE_MAPS . "`
|
|
||||||
SET `mxid` = ?
|
|
||||||
WHERE `uid` = ?;";
|
|
||||||
$saveMapStatement = $mysqli->prepare($saveMapQuery);
|
|
||||||
if ($mysqli->error) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$saveMapStatement->bind_param('is', $mapMxId, $mapUId);
|
|
||||||
foreach($mxMapInfos as $mxMapInfo) {
|
|
||||||
/** @var MXMapInfo $mxMapInfo */
|
|
||||||
$mapMxId = $mxMapInfo->id;
|
|
||||||
$mapUId = $mxMapInfo->uid;
|
|
||||||
$saveMapStatement->execute();
|
|
||||||
if ($saveMapStatement->error) {
|
|
||||||
trigger_error($saveMapStatement->error);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Take the uid out of the vector
|
|
||||||
if (isset($this->mxIdUidVector[$mxMapInfo->id])) {
|
|
||||||
$uid = $this->mxIdUidVector[$mxMapInfo->id];
|
|
||||||
} else {
|
|
||||||
$uid = $mxMapInfo->uid;
|
|
||||||
}
|
|
||||||
$map = $this->maniaControl->mapManager->getMapByUid($uid);
|
|
||||||
if ($map) {
|
|
||||||
// TODO: how does it come that $map can be empty here? we got an error report for that
|
|
||||||
/** @var Map $map */
|
|
||||||
$map->mx = $mxMapInfo;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$saveMapStatement->close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unset Map by Mx Id
|
* Unset Map by Mx Id
|
||||||
*
|
*
|
||||||
@ -138,7 +95,7 @@ class ManiaExchangeManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$id = 0;
|
$id = 0;
|
||||||
foreach($maps as $map) {
|
foreach ($maps as $map) {
|
||||||
/** @var Map $map */
|
/** @var Map $map */
|
||||||
$fetchMapStatement->bind_param('i', $map->index);
|
$fetchMapStatement->bind_param('i', $map->index);
|
||||||
$fetchMapStatement->execute();
|
$fetchMapStatement->execute();
|
||||||
@ -182,37 +139,6 @@ class ManiaExchangeManager {
|
|||||||
$fetchMapStatement->close();
|
$fetchMapStatement->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Map Info Asynchronously
|
|
||||||
*
|
|
||||||
* @param $id
|
|
||||||
* @param $function
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function getMapInfo($id, $function) {
|
|
||||||
// Get Title Prefix
|
|
||||||
$titlePrefix = $this->maniaControl->mapManager->getCurrentMap()->getGame();
|
|
||||||
|
|
||||||
// compile search URL
|
|
||||||
$url = 'http://api.mania-exchange.com/' . $titlePrefix . '/maps/?ids=' . $id;
|
|
||||||
|
|
||||||
return $this->maniaControl->fileReader->loadFile($url, function ($mapInfo, $error) use (&$function, $titlePrefix, $url) {
|
|
||||||
$mxMapInfo = null;
|
|
||||||
if ($error) {
|
|
||||||
trigger_error($error);
|
|
||||||
} else {
|
|
||||||
$mxMapList = json_decode($mapInfo);
|
|
||||||
if ($mxMapList === null) {
|
|
||||||
trigger_error('Cannot decode searched JSON data from ' . $url);
|
|
||||||
} else {
|
|
||||||
$mxMapInfo = new MXMapInfo($titlePrefix, $mxMapList[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
call_user_func($function, $mxMapInfo);
|
|
||||||
}, "application/json");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Whole MapList from MX by Mixed Uid and Id String fetch
|
* Get the Whole MapList from MX by Mixed Uid and Id String fetch
|
||||||
*
|
*
|
||||||
@ -244,7 +170,7 @@ class ManiaExchangeManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$maps = array();
|
$maps = array();
|
||||||
foreach($mxMapList as $map) {
|
foreach ($mxMapList as $map) {
|
||||||
if ($map) {
|
if ($map) {
|
||||||
$mxMapObject = new MXMapInfo($titlePrefix, $map);
|
$mxMapObject = new MXMapInfo($titlePrefix, $map);
|
||||||
if ($mxMapObject) {
|
if ($mxMapObject) {
|
||||||
@ -260,6 +186,78 @@ class ManiaExchangeManager {
|
|||||||
return $success;
|
return $success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store Map Info from MX and store the mxid in the database and the mx info in the map object
|
||||||
|
*
|
||||||
|
* @param $mxMapInfos
|
||||||
|
*/
|
||||||
|
public function updateMapObjectsWithManiaExchangeIds($mxMapInfos) {
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
// Save map data
|
||||||
|
$saveMapQuery = "UPDATE `" . MapManager::TABLE_MAPS . "`
|
||||||
|
SET `mxid` = ?
|
||||||
|
WHERE `uid` = ?;";
|
||||||
|
$saveMapStatement = $mysqli->prepare($saveMapQuery);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$saveMapStatement->bind_param('is', $mapMxId, $mapUId);
|
||||||
|
foreach ($mxMapInfos as $mxMapInfo) {
|
||||||
|
/** @var MXMapInfo $mxMapInfo */
|
||||||
|
$mapMxId = $mxMapInfo->id;
|
||||||
|
$mapUId = $mxMapInfo->uid;
|
||||||
|
$saveMapStatement->execute();
|
||||||
|
if ($saveMapStatement->error) {
|
||||||
|
trigger_error($saveMapStatement->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Take the uid out of the vector
|
||||||
|
if (isset($this->mxIdUidVector[$mxMapInfo->id])) {
|
||||||
|
$uid = $this->mxIdUidVector[$mxMapInfo->id];
|
||||||
|
} else {
|
||||||
|
$uid = $mxMapInfo->uid;
|
||||||
|
}
|
||||||
|
$map = $this->maniaControl->mapManager->getMapByUid($uid);
|
||||||
|
if ($map) {
|
||||||
|
// TODO: how does it come that $map can be empty here? we got an error report for that
|
||||||
|
/** @var Map $map */
|
||||||
|
$map->mx = $mxMapInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$saveMapStatement->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Map Info Asynchronously
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @param $function
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function getMapInfo($id, $function) {
|
||||||
|
// Get Title Prefix
|
||||||
|
$titlePrefix = $this->maniaControl->mapManager->getCurrentMap()->getGame();
|
||||||
|
|
||||||
|
// compile search URL
|
||||||
|
$url = 'http://api.mania-exchange.com/' . $titlePrefix . '/maps/?ids=' . $id;
|
||||||
|
|
||||||
|
return $this->maniaControl->fileReader->loadFile($url, function ($mapInfo, $error) use (&$function, $titlePrefix, $url) {
|
||||||
|
$mxMapInfo = null;
|
||||||
|
if ($error) {
|
||||||
|
trigger_error($error);
|
||||||
|
} else {
|
||||||
|
$mxMapList = json_decode($mapInfo);
|
||||||
|
if ($mxMapList === null) {
|
||||||
|
trigger_error('Cannot decode searched JSON data from ' . $url);
|
||||||
|
} else {
|
||||||
|
$mxMapInfo = new MXMapInfo($titlePrefix, $mxMapList[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
call_user_func($function, $mxMapInfo);
|
||||||
|
}, "application/json");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch a MapList Asynchronously
|
* Fetch a MapList Asynchronously
|
||||||
*
|
*
|
||||||
@ -308,7 +306,7 @@ class ManiaExchangeManager {
|
|||||||
$scriptInfos = $this->maniaControl->client->getModeScriptInfo();
|
$scriptInfos = $this->maniaControl->client->getModeScriptInfo();
|
||||||
$mapTypes = $scriptInfos->compatibleMapTypes;
|
$mapTypes = $scriptInfos->compatibleMapTypes;
|
||||||
$url .= '&mtype=' . $mapTypes;
|
$url .= '&mtype=' . $mapTypes;
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$success = $this->maniaControl->fileReader->loadFile($url, function ($mapInfo, $error) use (&$function, $titlePrefix) {
|
$success = $this->maniaControl->fileReader->loadFile($url, function ($mapInfo, $error) use (&$function, $titlePrefix) {
|
||||||
@ -332,7 +330,7 @@ class ManiaExchangeManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$maps = array();
|
$maps = array();
|
||||||
foreach($mxMapList as $map) {
|
foreach ($mxMapList as $map) {
|
||||||
if (!empty($map)) {
|
if (!empty($map)) {
|
||||||
array_push($maps, new MXMapInfo($titlePrefix, $map));
|
array_push($maps, new MXMapInfo($titlePrefix, $map));
|
||||||
}
|
}
|
||||||
@ -352,7 +350,7 @@ class ManiaExchangeManager {
|
|||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
private function getEnvironment($env) {
|
private function getEnvironment($env) {
|
||||||
switch($env) {
|
switch ($env) {
|
||||||
case 'TMCanyon':
|
case 'TMCanyon':
|
||||||
return 1;
|
return 1;
|
||||||
case 'TMStadium':
|
case 'TMStadium':
|
||||||
|
@ -12,8 +12,8 @@ use ManiaControl\Players\PlayerManager;
|
|||||||
/**
|
/**
|
||||||
* Class managing the Custom UI Settings
|
* Class managing the Custom UI Settings
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class CustomUIManager implements CallbackListener, TimerListener {
|
class CustomUIManager implements CallbackListener, TimerListener {
|
||||||
@ -51,19 +51,6 @@ class CustomUIManager implements CallbackListener, TimerListener {
|
|||||||
$this->customUI = new CustomUI();
|
$this->customUI = new CustomUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the CustomUI Manialink
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
private function updateManialink(Player $player = null) {
|
|
||||||
if ($player) {
|
|
||||||
$this->maniaControl->manialinkManager->sendManialink($this->customUI, $player->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$this->maniaControl->manialinkManager->sendManialink($this->customUI);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle 1Second
|
* Handle 1Second
|
||||||
*
|
*
|
||||||
@ -77,6 +64,19 @@ class CustomUIManager implements CallbackListener, TimerListener {
|
|||||||
$this->updateManialink();
|
$this->updateManialink();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the CustomUI Manialink
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
private function updateManialink(Player $player = null) {
|
||||||
|
if ($player) {
|
||||||
|
$this->maniaControl->manialinkManager->sendManialink($this->customUI, $player->login);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->maniaControl->manialinkManager->sendManialink($this->customUI);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle PlayerJoined Callback
|
* Handle PlayerJoined Callback
|
||||||
*
|
*
|
||||||
@ -87,9 +87,9 @@ class CustomUIManager implements CallbackListener, TimerListener {
|
|||||||
|
|
||||||
//send it again after 500ms
|
//send it again after 500ms
|
||||||
$self = $this;
|
$self = $this;
|
||||||
$this->maniaControl->timerManager->registerOneTimeListening($this, function($time) use (&$self, &$player){
|
$this->maniaControl->timerManager->registerOneTimeListening($this, function ($time) use (&$self, &$player) {
|
||||||
$self->updateManialink($player);
|
$self->updateManialink($player);
|
||||||
},500);
|
}, 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -8,14 +8,14 @@ use FML\ManiaLink;
|
|||||||
use ManiaControl\Callbacks\CallbackListener;
|
use ManiaControl\Callbacks\CallbackListener;
|
||||||
use ManiaControl\Callbacks\CallbackManager;
|
use ManiaControl\Callbacks\CallbackManager;
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
use ManiaControl\Players\PlayerManager;
|
|
||||||
use ManiaControl\Players\Player;
|
use ManiaControl\Players\Player;
|
||||||
|
use ManiaControl\Players\PlayerManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class managing Icons
|
* Class managing Icons
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class IconManager implements CallbackListener {
|
class IconManager implements CallbackListener {
|
||||||
@ -95,15 +95,6 @@ class IconManager implements CallbackListener {
|
|||||||
$this->preloadIcons();
|
$this->preloadIcons();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle PlayerConnect Callback
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function handlePlayerConnect(Player $player) {
|
|
||||||
$this->preloadIcons($player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preload Icons
|
* Preload Icons
|
||||||
*
|
*
|
||||||
@ -115,7 +106,7 @@ class IconManager implements CallbackListener {
|
|||||||
$maniaLink->add($frame);
|
$maniaLink->add($frame);
|
||||||
$frame->setPosition(500, 500);
|
$frame->setPosition(500, 500);
|
||||||
|
|
||||||
foreach($this->icons as $iconUrl) {
|
foreach ($this->icons as $iconUrl) {
|
||||||
$iconQuad = new Quad();
|
$iconQuad = new Quad();
|
||||||
$iconQuad->setImage($iconUrl);
|
$iconQuad->setImage($iconUrl);
|
||||||
$iconQuad->setSize(1, 1);
|
$iconQuad->setSize(1, 1);
|
||||||
@ -125,4 +116,13 @@ class IconManager implements CallbackListener {
|
|||||||
// Send manialink
|
// Send manialink
|
||||||
$this->maniaControl->manialinkManager->sendManialink($maniaLink, $player);
|
$this->maniaControl->manialinkManager->sendManialink($maniaLink, $player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle PlayerConnect Callback
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function handlePlayerConnect(Player $player) {
|
||||||
|
$this->preloadIcons($player);
|
||||||
|
}
|
||||||
}
|
}
|
@ -16,8 +16,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
|
|||||||
/**
|
/**
|
||||||
* Manialink Manager Class
|
* Manialink Manager Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener {
|
class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener {
|
||||||
@ -185,7 +185,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function sendManialink($manialinkText, $logins = null, $timeout = 0, $hideOnClick = false) {
|
public function sendManialink($manialinkText, $logins = null, $timeout = 0, $hideOnClick = false) {
|
||||||
$manialinkText = (string) $manialinkText;
|
$manialinkText = (string)$manialinkText;
|
||||||
|
|
||||||
if (!$manialinkText) {
|
if (!$manialinkText) {
|
||||||
return true;
|
return true;
|
||||||
@ -214,46 +214,13 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
|||||||
|
|
||||||
return $success;
|
return $success;
|
||||||
}
|
}
|
||||||
}
|
} catch (LoginUnknownException $e) {
|
||||||
catch (LoginUnknownException $e) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Enable the alt menu for the player
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function enableAltMenu(Player $player) {
|
|
||||||
try {
|
|
||||||
$success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_EnableAltMenu', $player->login);
|
|
||||||
}
|
|
||||||
catch (NotInScriptModeException $e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return $success;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disable the alt menu for the player
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function disableAltMenu(Player $player) {
|
|
||||||
try {
|
|
||||||
$success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_DisableAltMenu', $player->login);
|
|
||||||
}
|
|
||||||
catch (NotInScriptModeException $e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return $success;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Displays a ManiaLink Widget to a certain Player (Should only be used on Main Widgets)
|
* Displays a ManiaLink Widget to a certain Player (Should only be used on Main Widgets)
|
||||||
*
|
*
|
||||||
@ -273,6 +240,21 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable the alt menu for the player
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function disableAltMenu(Player $player) {
|
||||||
|
try {
|
||||||
|
$success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_DisableAltMenu', $player->login);
|
||||||
|
} catch (NotInScriptModeException $e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $success;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closes a widget via the callback
|
* Closes a widget via the callback
|
||||||
*
|
*
|
||||||
@ -297,13 +279,27 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
|
|||||||
|
|
||||||
// Trigger callback
|
// Trigger callback
|
||||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_MAIN_WINDOW_CLOSED, $player);
|
$this->maniaControl->callbackManager->triggerCallback(self::CB_MAIN_WINDOW_CLOSED, $player);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$emptyManialink = new ManiaLink($widgetId);
|
$emptyManialink = new ManiaLink($widgetId);
|
||||||
$this->sendManialink($emptyManialink, $player->login);
|
$this->sendManialink($emptyManialink, $player->login);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable the alt menu for the player
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function enableAltMenu(Player $player) {
|
||||||
|
try {
|
||||||
|
$success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_EnableAltMenu', $player->login);
|
||||||
|
} catch (NotInScriptModeException $e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $success;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a line of labels
|
* Adds a line of labels
|
||||||
*
|
*
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl\Manialinks;
|
|||||||
/**
|
/**
|
||||||
* Interface for Manialink Page Answer Listeners
|
* Interface for Manialink Page Answer Listeners
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
interface ManialinkPageAnswerListener {
|
interface ManialinkPageAnswerListener {
|
||||||
|
@ -16,8 +16,8 @@ use ManiaControl\ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Class managing default Control Styles
|
* Class managing default Control Styles
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class StyleManager {
|
class StyleManager {
|
||||||
@ -98,21 +98,23 @@ class StyleManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the default main window style
|
* Gets the Default Description Label
|
||||||
*
|
*
|
||||||
* @return string
|
* @return Label
|
||||||
*/
|
*/
|
||||||
public function getDefaultMainWindowStyle() {
|
public function getDefaultDescriptionLabel() {
|
||||||
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_STYLE);
|
$width = $this->getListWidgetsWidth();
|
||||||
}
|
$height = $this->getListWidgetsHeight();
|
||||||
|
|
||||||
/**
|
// Predefine Description Label
|
||||||
* Get the default main window substyle
|
$descriptionLabel = new Label();
|
||||||
*
|
$descriptionLabel->setAlign(Control::LEFT, Control::TOP);
|
||||||
* @return string
|
$descriptionLabel->setPosition(-$width / 2 + 10, -$height / 2 + 5);
|
||||||
*/
|
$descriptionLabel->setSize($width * 0.7, 4);
|
||||||
public function getDefaultMainWindowSubStyle() {
|
$descriptionLabel->setTextSize(2);
|
||||||
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_SUBSTYLE);
|
$descriptionLabel->setVisible(false);
|
||||||
|
|
||||||
|
return $descriptionLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -133,27 +135,6 @@ class StyleManager {
|
|||||||
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_LIST_WIDGETS_HEIGHT);
|
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_LIST_WIDGETS_HEIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the Default Description Label
|
|
||||||
*
|
|
||||||
* @return Label
|
|
||||||
*/
|
|
||||||
public function getDefaultDescriptionLabel() {
|
|
||||||
$width = $this->getListWidgetsWidth();
|
|
||||||
$height = $this->getListWidgetsHeight();
|
|
||||||
|
|
||||||
// Predefine Description Label
|
|
||||||
$descriptionLabel = new Label();
|
|
||||||
$descriptionLabel->setAlign(Control::LEFT, Control::TOP);
|
|
||||||
$descriptionLabel->setPosition(-$width / 2 + 10, -$height / 2 + 5);
|
|
||||||
$descriptionLabel->setSize($width * 0.7, 4);
|
|
||||||
$descriptionLabel->setTextSize(2);
|
|
||||||
$descriptionLabel->setVisible(false);
|
|
||||||
|
|
||||||
return $descriptionLabel;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the Default List Frame
|
* Builds the Default List Frame
|
||||||
*
|
*
|
||||||
@ -228,4 +209,22 @@ class StyleManager {
|
|||||||
|
|
||||||
return $frame;
|
return $frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the default main window style
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDefaultMainWindowStyle() {
|
||||||
|
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_STYLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the default main window substyle
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDefaultMainWindowSubStyle() {
|
||||||
|
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_SUBSTYLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,10 +6,10 @@ use ManiaControl\Formatter;
|
|||||||
use ManiaControl\ManiaExchange\MXMapInfo;
|
use ManiaControl\ManiaExchange\MXMapInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map Class
|
* Map Model Class
|
||||||
*
|
*
|
||||||
* @author kremsy & steeffeen
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class Map {
|
class Map {
|
||||||
@ -76,7 +76,7 @@ class Map {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getGame() {
|
public function getGame() {
|
||||||
switch($this->environment) {
|
switch ($this->environment) {
|
||||||
case 'Storm':
|
case 'Storm':
|
||||||
return "sm";
|
return "sm";
|
||||||
case 'Canyon':
|
case 'Canyon':
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl\Maps;
|
|||||||
use FML\Controls\Quad;
|
use FML\Controls\Quad;
|
||||||
use FML\Controls\Quads\Quad_Icons64x64_1;
|
use FML\Controls\Quads\Quad_Icons64x64_1;
|
||||||
use FML\Controls\Quads\Quad_UIConstruction_Buttons;
|
use FML\Controls\Quads\Quad_UIConstruction_Buttons;
|
||||||
use ManiaControl\Callbacks\CallbackManager;
|
|
||||||
use ManiaControl\Callbacks\CallbackListener;
|
use ManiaControl\Callbacks\CallbackListener;
|
||||||
|
use ManiaControl\Callbacks\CallbackManager;
|
||||||
use ManiaControl\Commands\CommandListener;
|
use ManiaControl\Commands\CommandListener;
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
use ManiaControl\Manialinks\IconManager;
|
use ManiaControl\Manialinks\IconManager;
|
||||||
@ -18,8 +18,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\FaultException;
|
|||||||
/**
|
/**
|
||||||
* Class offering Commands to manage Maps
|
* Class offering Commands to manage Maps
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class MapCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
|
class MapCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
|
||||||
@ -194,7 +194,7 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->nextMap();
|
$this->maniaControl->client->nextMap();
|
||||||
} catch(ChangeInProgressException $e) {
|
} catch (ChangeInProgressException $e) {
|
||||||
}
|
}
|
||||||
$message = '$<' . $player->nickname . '$> skipped the current Map!';
|
$message = '$<' . $player->nickname . '$> skipped the current Map!';
|
||||||
$this->maniaControl->chat->sendSuccess($message);
|
$this->maniaControl->chat->sendSuccess($message);
|
||||||
@ -218,7 +218,7 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->restartMap();
|
$this->maniaControl->client->restartMap();
|
||||||
} catch(ChangeInProgressException $e) {
|
} catch (ChangeInProgressException $e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,25 +254,25 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
}
|
}
|
||||||
|
|
||||||
$chatCommand = explode(' ', $chat[1][2]);
|
$chatCommand = explode(' ', $chat[1][2]);
|
||||||
if(isset($chatCommand[1])) {
|
if (isset($chatCommand[1])) {
|
||||||
if(strstr($chatCommand[1], '.txt')) {
|
if (strstr($chatCommand[1], '.txt')) {
|
||||||
$maplist = $chatCommand[1];
|
$maplist = $chatCommand[1];
|
||||||
} else {
|
} else {
|
||||||
$maplist = $chatCommand.'.txt';
|
$maplist = $chatCommand . '.txt';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$maplist = 'maplist.txt';
|
$maplist = 'maplist.txt';
|
||||||
}
|
}
|
||||||
|
|
||||||
$maplist = 'MatchSettings/'.$maplist;
|
$maplist = 'MatchSettings/' . $maplist;
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->saveMatchSettings($maplist);
|
$this->maniaControl->client->saveMatchSettings($maplist);
|
||||||
|
|
||||||
$message = 'Maplist $<$fff'.$maplist.'$> written.';
|
$message = 'Maplist $<$fff' . $maplist . '$> written.';
|
||||||
$this->maniaControl->chat->sendSuccess($message, $player);
|
$this->maniaControl->chat->sendSuccess($message, $player);
|
||||||
$this->maniaControl->log($message, true);
|
$this->maniaControl->log($message, true);
|
||||||
} catch(FaultException $e) {
|
} catch (FaultException $e) {
|
||||||
$this->maniaControl->chat->sendError('Cannot write maplist $<$fff'.$maplist.'$>!', $player);
|
$this->maniaControl->chat->sendError('Cannot write maplist $<$fff' . $maplist . '$>!', $player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,29 +289,34 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
}
|
}
|
||||||
|
|
||||||
$chatCommand = explode(' ', $chat[1][2]);
|
$chatCommand = explode(' ', $chat[1][2]);
|
||||||
if(isset($chatCommand[1])) {
|
if (isset($chatCommand[1])) {
|
||||||
if(strstr($chatCommand[1], '.txt')) {
|
if (strstr($chatCommand[1], '.txt')) {
|
||||||
$maplist = $chatCommand[1];
|
$maplist = $chatCommand[1];
|
||||||
} else {
|
} else {
|
||||||
$maplist = $chatCommand[1].'.txt';
|
$maplist = $chatCommand[1] . '.txt';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$maplist = 'maplist.txt';
|
$maplist = 'maplist.txt';
|
||||||
}
|
}
|
||||||
|
|
||||||
$maplist = 'MatchSettings/'.$maplist;
|
$maplist = 'MatchSettings/' . $maplist;
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->loadMatchSettings($maplist);
|
$this->maniaControl->client->loadMatchSettings($maplist);
|
||||||
|
|
||||||
$message = 'Maplist $<$fff'.$maplist.'$> loaded.';
|
$message = 'Maplist $<$fff' . $maplist . '$> loaded.';
|
||||||
$this->maniaControl->mapManager->restructureMapList();
|
$this->maniaControl->mapManager->restructureMapList();
|
||||||
$this->maniaControl->chat->sendSuccess($message, $player);
|
$this->maniaControl->chat->sendSuccess($message, $player);
|
||||||
$this->maniaControl->log($message, true);
|
$this->maniaControl->log($message, true);
|
||||||
} catch(FaultException $e) {
|
} catch (FaultException $e) {
|
||||||
$this->maniaControl->chat->sendError('Cannot load maplist $<$fff'.$maplist.'$>!', $player);
|
$this->maniaControl->chat->sendError('Cannot load maplist $<$fff' . $maplist . '$>!', $player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle ManialinkPageAnswer Callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
public function handleManialinkPageAnswer(array $callback) {
|
public function handleManialinkPageAnswer(array $callback) {
|
||||||
$actionId = $callback[1][2];
|
$actionId = $callback[1][2];
|
||||||
|
|
||||||
@ -325,6 +330,30 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the Player a List of Maps from the given Author
|
||||||
|
*
|
||||||
|
* @param string $author
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
private function showMapListAuthor($author, Player $player) {
|
||||||
|
$maps = $this->maniaControl->mapManager->getMaps();
|
||||||
|
$mapList = array();
|
||||||
|
/** @var Map $map */
|
||||||
|
foreach ($maps as $map) {
|
||||||
|
if ($map->authorLogin == $author) {
|
||||||
|
$mapList[] = $map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($mapList) == 0) {
|
||||||
|
$this->maniaControl->chat->sendError('There are no maps to show!', $player->login);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->maniaControl->mapManager->mapList->showMapList($player, $mapList);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle /maps command
|
* Handle /maps command
|
||||||
*
|
*
|
||||||
@ -334,19 +363,19 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
public function command_List(array $chatCallback, Player $player) {
|
public function command_List(array $chatCallback, Player $player) {
|
||||||
$chatCommands = explode(' ', $chatCallback[1][2]);
|
$chatCommands = explode(' ', $chatCallback[1][2]);
|
||||||
$this->maniaControl->mapManager->mapList->playerCloseWidget($player);
|
$this->maniaControl->mapManager->mapList->playerCloseWidget($player);
|
||||||
if(isset($chatCommands[1])) {
|
if (isset($chatCommands[1])) {
|
||||||
if($chatCommands[1] == ' ' || $chatCommands[1] == 'all') {
|
if ($chatCommands[1] == ' ' || $chatCommands[1] == 'all') {
|
||||||
$this->maniaControl->mapManager->mapList->showMapList($player);
|
$this->maniaControl->mapManager->mapList->showMapList($player);
|
||||||
} elseif($chatCommands[1] == 'best') {
|
} elseif ($chatCommands[1] == 'best') {
|
||||||
$this->showMapListKarma(true, $player);
|
$this->showMapListKarma(true, $player);
|
||||||
} elseif($chatCommands[1] == 'worst') {
|
} elseif ($chatCommands[1] == 'worst') {
|
||||||
$this->showMapListKarma(false, $player);
|
$this->showMapListKarma(false, $player);
|
||||||
} elseif($chatCommands[1] == 'newest') {
|
} elseif ($chatCommands[1] == 'newest') {
|
||||||
$this->showMapListDate(true, $player);
|
$this->showMapListDate(true, $player);
|
||||||
} elseif($chatCommands[1] == 'oldest') {
|
} elseif ($chatCommands[1] == 'oldest') {
|
||||||
$this->showMapListDate(false, $player);
|
$this->showMapListDate(false, $player);
|
||||||
} elseif($chatCommands[1] == 'author') {
|
} elseif ($chatCommands[1] == 'author') {
|
||||||
if(isset($chatCommands[2])) {
|
if (isset($chatCommands[2])) {
|
||||||
$this->showMaplistAuthor($chatCommands[2], $player);
|
$this->showMaplistAuthor($chatCommands[2], $player);
|
||||||
} else {
|
} else {
|
||||||
$this->maniaControl->chat->sendError('There are no maps to show!', $player->login);
|
$this->maniaControl->chat->sendError('There are no maps to show!', $player->login);
|
||||||
@ -357,58 +386,46 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function showMapListAuthor($author, $player) {
|
/**
|
||||||
$maps = $this->maniaControl->mapManager->getMaps();
|
* Show a Karma based MapList
|
||||||
$mapList = array();
|
*
|
||||||
/** @var Map $map */
|
* @param bool $best
|
||||||
foreach($maps as $map) {
|
* @param Player $player
|
||||||
if($map->authorLogin == $author) {
|
*/
|
||||||
$mapList[] = $map;
|
private function showMapListKarma($best, Player $player) {
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(count($mapList) == 0) {
|
|
||||||
$this->maniaControl->chat->sendError('There are no maps to show!', $player->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->maniaControl->mapManager->mapList->showMapList($player, $mapList);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function showMapListKarma($best, $player) {
|
|
||||||
/** @var \MCTeam\KarmaPlugin $karmaPlugin */
|
/** @var \MCTeam\KarmaPlugin $karmaPlugin */
|
||||||
$karmaPlugin = $this->maniaControl->pluginManager->getPlugin(MapList::DEFAULT_KARMA_PLUGIN);
|
$karmaPlugin = $this->maniaControl->pluginManager->getPlugin(MapList::DEFAULT_KARMA_PLUGIN);
|
||||||
if($karmaPlugin) {
|
if ($karmaPlugin) {
|
||||||
$maps = $this->maniaControl->mapManager->getMaps();
|
$maps = $this->maniaControl->mapManager->getMaps();
|
||||||
$mapList = array();
|
$mapList = array();
|
||||||
foreach($maps as $map) {
|
foreach ($maps as $map) {
|
||||||
if($map instanceof Map) {
|
if ($map instanceof Map) {
|
||||||
if($this->maniaControl->settingManager->getSetting($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA) === true) {
|
if ($this->maniaControl->settingManager->getSetting($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA) === true) {
|
||||||
$karma = $karmaPlugin->getMapKarma($map);
|
$karma = $karmaPlugin->getMapKarma($map);
|
||||||
$map->karma = round($karma * 100.);
|
$map->karma = round($karma * 100.);
|
||||||
} else {
|
} else {
|
||||||
$votes = $karmaPlugin->getMapVotes($map);
|
$votes = $karmaPlugin->getMapVotes($map);
|
||||||
$min = 0;
|
$min = 0;
|
||||||
$plus = 0;
|
$plus = 0;
|
||||||
foreach($votes as $vote) {
|
foreach ($votes as $vote) {
|
||||||
if(isset($vote->vote)) {
|
if (isset($vote->vote)) {
|
||||||
if($vote->vote != 0.5) {
|
if ($vote->vote != 0.5) {
|
||||||
if($vote->vote < 0.5) {
|
if ($vote->vote < 0.5) {
|
||||||
$min = $min+$vote->count;
|
$min = $min + $vote->count;
|
||||||
} else {
|
} else {
|
||||||
$plus = $plus+$vote->count;
|
$plus = $plus + $vote->count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$map->karma = $plus-$min;
|
$map->karma = $plus - $min;
|
||||||
}
|
}
|
||||||
$mapList[] = $map;
|
$mapList[] = $map;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usort($mapList, array($this, 'sortByKarma'));
|
usort($mapList, array($this, 'sortByKarma'));
|
||||||
if($best) {
|
if ($best) {
|
||||||
$mapList = array_reverse($mapList);
|
$mapList = array_reverse($mapList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,18 +435,20 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function sortByKarma($a, $b) {
|
/**
|
||||||
return $a->karma - $b->karma;
|
* Show a Date based MapList
|
||||||
}
|
*
|
||||||
|
* @param bool $newest
|
||||||
private function showMapListDate($newest, $player) {
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
private function showMapListDate($newest, Player $player) {
|
||||||
$maps = $this->maniaControl->mapManager->getMaps();
|
$maps = $this->maniaControl->mapManager->getMaps();
|
||||||
|
|
||||||
usort($maps, function($a, $b) {
|
usort($maps, function ($a, $b) {
|
||||||
return $a->index - $b->index;
|
return ($a->index - $b->index);
|
||||||
});
|
});
|
||||||
|
|
||||||
if($newest) {
|
if ($newest) {
|
||||||
$maps = array_reverse($maps);
|
$maps = array_reverse($maps);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,4 +464,15 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
public function command_xList(array $chatCallback, Player $player) {
|
public function command_xList(array $chatCallback, Player $player) {
|
||||||
$this->maniaControl->mapManager->mxList->showList($chatCallback, $player);
|
$this->maniaControl->mapManager->mxList->showList($chatCallback, $player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper Function to sort Maps by Karma
|
||||||
|
*
|
||||||
|
* @param Map $a
|
||||||
|
* @param Map $b
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
private function sortByKarma($a, $b) {
|
||||||
|
return ($a->karma - $b->karma);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace ManiaControl\Maps;
|
namespace ManiaControl\Maps;
|
||||||
|
|
||||||
use MCTeam\CustomVotesPlugin;
|
|
||||||
use FML\Controls\Control;
|
use FML\Controls\Control;
|
||||||
use FML\Controls\Frame;
|
use FML\Controls\Frame;
|
||||||
use FML\Controls\Gauge;
|
use FML\Controls\Gauge;
|
||||||
@ -25,13 +24,14 @@ use ManiaControl\Manialinks\ManialinkManager;
|
|||||||
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
|
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
|
||||||
use ManiaControl\Players\Player;
|
use ManiaControl\Players\Player;
|
||||||
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
||||||
|
use MCTeam\CustomVotesPlugin;
|
||||||
use MCTeam\KarmaPlugin;
|
use MCTeam\KarmaPlugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MapList Widget Class
|
* MapList Widget Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
||||||
@ -127,14 +127,12 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$mapList = array_slice($maps, $chunk, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE);
|
$mapList = array_slice($maps, $chunk, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE);
|
||||||
$this->mapsInListShown[$player->login] = $maps;
|
$this->mapsInListShown[$player->login] = $maps;
|
||||||
$pageCount = ceil(count($maps) / self::MAX_MAPS_PER_PAGE);
|
$pageCount = ceil(count($maps) / self::MAX_MAPS_PER_PAGE);
|
||||||
}
|
} else if (array_key_exists($player->login, $this->mapsInListShown)) {
|
||||||
else if (array_key_exists($player->login, $this->mapsInListShown)) {
|
|
||||||
$completeList = $this->mapsInListShown[$player->login];
|
$completeList = $this->mapsInListShown[$player->login];
|
||||||
$this->mapsInListShown[$player->login] = $completeList;
|
$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);
|
$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);
|
$pageCount = ceil(count($completeList) / self::MAX_MAPS_PER_PAGE);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$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);
|
||||||
$this->mapsInListShown[$player->login] = $this->maniaControl->mapManager->getMaps();
|
$this->mapsInListShown[$player->login] = $this->maniaControl->mapManager->getMaps();
|
||||||
@ -145,7 +143,9 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$script = $maniaLink->getScript();
|
$script = $maniaLink->getScript();
|
||||||
$paging = new Paging();
|
$paging = new Paging();
|
||||||
$script->addFeature($paging);
|
$script->addFeature($paging);
|
||||||
if (!is_null($pageCount)) $paging->setCustomMaxPageNumber($pageCount);
|
if (!is_null($pageCount)) {
|
||||||
|
$paging->setCustomMaxPageNumber($pageCount);
|
||||||
|
}
|
||||||
$paging->setChunkActionAppendsPageNumber(true);
|
$paging->setChunkActionAppendsPageNumber(true);
|
||||||
$paging->setChunkActions(self::ACTION_PAGING_CHUNKS);
|
$paging->setChunkActions(self::ACTION_PAGING_CHUNKS);
|
||||||
|
|
||||||
@ -204,8 +204,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$frame->add($headFrame);
|
$frame->add($headFrame);
|
||||||
$headFrame->setY($height / 2 - 5);
|
$headFrame->setY($height / 2 - 5);
|
||||||
$x = -$width / 2;
|
$x = -$width / 2;
|
||||||
$array = array('Id' => $x + 5, 'Mx Id' => $x + 10, 'Map Name' => $x + 20, 'Author' => $x + 68, 'Karma' => $x + 115,
|
$array = array('Id' => $x + 5, 'Mx Id' => $x + 10, 'Map Name' => $x + 20, 'Author' => $x + 68, 'Karma' => $x + 115, 'Actions' => $width / 2 - 15);
|
||||||
'Actions' => $width / 2 - 15);
|
|
||||||
$this->maniaControl->manialinkManager->labelLine($headFrame, $array);
|
$this->maniaControl->manialinkManager->labelLine($headFrame, $array);
|
||||||
|
|
||||||
// Predefine description Label
|
// Predefine description Label
|
||||||
@ -214,7 +213,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
|
|
||||||
$queuedMaps = $this->maniaControl->mapManager->mapQueue->getQueuedMapsRanking();
|
$queuedMaps = $this->maniaControl->mapManager->mapQueue->getQueuedMapsRanking();
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var KarmaPlugin $karmaPlugin
|
* @var KarmaPlugin $karmaPlugin
|
||||||
*/
|
*/
|
||||||
$karmaPlugin = $this->maniaControl->pluginManager->getPlugin(self::DEFAULT_KARMA_PLUGIN);
|
$karmaPlugin = $this->maniaControl->pluginManager->getPlugin(self::DEFAULT_KARMA_PLUGIN);
|
||||||
@ -227,7 +225,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$y = $height / 2 - 10;
|
$y = $height / 2 - 10;
|
||||||
$pageFrames = array();
|
$pageFrames = array();
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var Map $map
|
* @var Map $map
|
||||||
*/
|
*/
|
||||||
$currentMap = $this->maniaControl->mapManager->getCurrentMap();
|
$currentMap = $this->maniaControl->mapManager->getCurrentMap();
|
||||||
@ -312,7 +309,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$labels = $this->maniaControl->manialinkManager->labelLine($mapFrame, $array);
|
$labels = $this->maniaControl->manialinkManager->labelLine($mapFrame, $array);
|
||||||
if (isset($labels[3])) {
|
if (isset($labels[3])) {
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var Label $label
|
* @var Label $label
|
||||||
*/
|
*/
|
||||||
$label = $labels[3];
|
$label = $labels[3];
|
||||||
@ -340,13 +336,11 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$description = 'Remove $<' . $map->name . '$> from the Map Queue';
|
$description = 'Remove $<' . $map->name . '$> from the Map Queue';
|
||||||
$label->addTooltipLabelFeature($descriptionLabel, $description);
|
$label->addTooltipLabelFeature($descriptionLabel, $description);
|
||||||
$label->setAction(self::ACTION_UNQUEUE_MAP . '.' . $map->uid);
|
$label->setAction(self::ACTION_UNQUEUE_MAP . '.' . $map->uid);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$description = '$<' . $map->name . '$> is on Map-Queue Position: ' . $queuedMaps[$map->uid];
|
$description = '$<' . $map->name . '$> is on Map-Queue Position: ' . $queuedMaps[$map->uid];
|
||||||
$label->addTooltipLabelFeature($descriptionLabel, $description);
|
$label->addTooltipLabelFeature($descriptionLabel, $description);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// Map-Queue-Map-Button
|
// Map-Queue-Map-Button
|
||||||
$queueLabel = new Label_Button();
|
$queueLabel = new Label_Button();
|
||||||
$mapFrame->add($queueLabel);
|
$mapFrame->add($queueLabel);
|
||||||
@ -355,7 +349,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$queueLabel->setSize(3, 3);
|
$queueLabel->setSize(3, 3);
|
||||||
$queueLabel->setText('+');
|
$queueLabel->setText('+');
|
||||||
|
|
||||||
if(in_array($map->uid, $queueBuffer)) {
|
if (in_array($map->uid, $queueBuffer)) {
|
||||||
if ($this->maniaControl->authenticationManager->checkPermission($player, MapQueue::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
|
if ($this->maniaControl->authenticationManager->checkPermission($player, MapQueue::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
|
||||||
$queueLabel->setAction(self::ACTION_QUEUED_MAP . '.' . $map->uid);
|
$queueLabel->setAction(self::ACTION_QUEUED_MAP . '.' . $map->uid);
|
||||||
}
|
}
|
||||||
@ -403,8 +397,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
|
|
||||||
$description = 'Switch Directly to Map: $<' . $map->name . '$>';
|
$description = 'Switch Directly to Map: $<' . $map->name . '$>';
|
||||||
$switchLabel->addTooltipLabelFeature($descriptionLabel, $description);
|
$switchLabel->addTooltipLabelFeature($descriptionLabel, $description);
|
||||||
}
|
} else if ($this->maniaControl->pluginManager->isPluginActive(self::DEFAULT_CUSTOM_VOTE_PLUGIN)) {
|
||||||
else if ($this->maniaControl->pluginManager->isPluginActive(self::DEFAULT_CUSTOM_VOTE_PLUGIN)) {
|
|
||||||
// Switch Map Voting
|
// Switch Map Voting
|
||||||
$switchLabel = new Label_Button();
|
$switchLabel = new Label_Button();
|
||||||
$mapFrame->add($switchLabel);
|
$mapFrame->add($switchLabel);
|
||||||
@ -426,23 +419,23 @@ 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)) {
|
||||||
if($this->maniaControl->settingManager->getSetting($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA)) {
|
if ($this->maniaControl->settingManager->getSetting($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA)) {
|
||||||
$karmaText = ' ' . round($karma * 100.) . '% (' . $votes['count'] . ')';
|
$karmaText = ' ' . round($karma * 100.) . '% (' . $votes['count'] . ')';
|
||||||
} else {
|
} else {
|
||||||
$min = 0;
|
$min = 0;
|
||||||
$plus = 0;
|
$plus = 0;
|
||||||
foreach($votes as $vote) {
|
foreach ($votes as $vote) {
|
||||||
if(isset($vote->vote)) {
|
if (isset($vote->vote)) {
|
||||||
if($vote->vote != 0.5) {
|
if ($vote->vote != 0.5) {
|
||||||
if($vote->vote < 0.5) {
|
if ($vote->vote < 0.5) {
|
||||||
$min = $min+$vote->count;
|
$min = $min + $vote->count;
|
||||||
} else {
|
} else {
|
||||||
$plus = $plus+$vote->count;
|
$plus = $plus + $vote->count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$endKarma = $plus-$min;
|
$endKarma = $plus - $min;
|
||||||
$karmaText = ' ' . $endKarma . ' (' . $votes['count'] . 'x / ' . round($karma * 100.) . '%)';
|
$karmaText = ' ' . $endKarma . ' (' . $votes['count'] . 'x / ' . round($karma * 100.) . '%)';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -527,8 +520,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$buttLabel->setText('»');
|
$buttLabel->setText('»');
|
||||||
$buttLabel->setTextColor('0f0');
|
$buttLabel->setTextColor('0f0');
|
||||||
$buttLabel->setTextSize(2);
|
$buttLabel->setTextSize(2);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$buttLabel->setTextSize(1);
|
$buttLabel->setTextSize(1);
|
||||||
$buttLabel->setText('x');
|
$buttLabel->setText('x');
|
||||||
$buttLabel->setTextColor('a00');
|
$buttLabel->setTextColor('a00');
|
||||||
@ -560,17 +552,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
unset($this->mapsInListShown[$player->login]);
|
unset($this->mapsInListShown[$player->login]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Closes the widget
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function playerCloseWidget(Player $player) {
|
|
||||||
unset($this->mapListShown[$player->login]);
|
|
||||||
unset($this->mapsInListShown[$player->login]);
|
|
||||||
$this->maniaControl->manialinkManager->closeWidget($player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle ManialinkPageAnswer Callback
|
* Handle ManialinkPageAnswer Callback
|
||||||
*
|
*
|
||||||
@ -587,7 +568,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$action = $actionArray[0] . '.' . $actionArray[1];
|
$action = $actionArray[0] . '.' . $actionArray[1];
|
||||||
$login = $callback[1][1];
|
$login = $callback[1][1];
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
$mapId = (int) $actionArray[2];
|
$mapId = (int)$actionArray[2];
|
||||||
|
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
case self::ACTION_UPDATE_MAP:
|
case self::ACTION_UPDATE_MAP:
|
||||||
@ -602,8 +583,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
case self::ACTION_SWITCH_MAP:
|
case self::ACTION_SWITCH_MAP:
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->jumpToMapIndex($mapId);
|
$this->maniaControl->client->jumpToMapIndex($mapId);
|
||||||
}
|
} catch (Exception $e) {
|
||||||
catch (Exception $e) {
|
|
||||||
// TODO: is it even possible that an exception other than connection errors will be thrown? - remove try-catch?
|
// TODO: is it even possible that an exception other than connection errors will be thrown? - remove try-catch?
|
||||||
$this->maniaControl->chat->sendError("Error while Jumping to Map Index");
|
$this->maniaControl->chat->sendError("Error while Jumping to Map Index");
|
||||||
break;
|
break;
|
||||||
@ -619,7 +599,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
break;
|
break;
|
||||||
case self::ACTION_START_SWITCH_VOTE:
|
case self::ACTION_START_SWITCH_VOTE:
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var $votesPlugin CustomVotesPlugin
|
* @var $votesPlugin CustomVotesPlugin
|
||||||
*/
|
*/
|
||||||
$votesPlugin = $this->maniaControl->pluginManager->getPlugin(self::DEFAULT_CUSTOM_VOTE_PLUGIN);
|
$votesPlugin = $this->maniaControl->pluginManager->getPlugin(self::DEFAULT_CUSTOM_VOTE_PLUGIN);
|
||||||
@ -629,21 +608,19 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$message = '$<' . $player->nickname . '$>$s started a vote to switch to $<' . $map->name . '$>!';
|
$message = '$<' . $player->nickname . '$>$s started a vote to switch to $<' . $map->name . '$>!';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var Map $map
|
* @var Map $map
|
||||||
*/
|
*/
|
||||||
$votesPlugin->defineVote('switchmap', "Goto " . $map->name, true, $message);
|
$votesPlugin->defineVote('switchmap', "Goto " . $map->name, true, $message);
|
||||||
|
|
||||||
$self = $this;
|
$self = $this;
|
||||||
$votesPlugin->startVote($player, 'switchmap', function ($result) use(&$self, &$votesPlugin, &$map) {
|
$votesPlugin->startVote($player, 'switchmap', function ($result) use (&$self, &$votesPlugin, &$map) {
|
||||||
$self->maniaControl->chat->sendInformation('$sVote Successfully -> Map switched!');
|
$self->maniaControl->chat->sendInformation('$sVote Successfully -> Map switched!');
|
||||||
$votesPlugin->undefineVote('switchmap');
|
$votesPlugin->undefineVote('switchmap');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$index = $self->maniaControl->mapManager->getMapIndex($map);
|
$index = $self->maniaControl->mapManager->getMapIndex($map);
|
||||||
$self->maniaControl->client->jumpToMapIndex($index);
|
$self->maniaControl->client->jumpToMapIndex($index);
|
||||||
}
|
} catch (Exception $e) {
|
||||||
catch (Exception $e) {
|
|
||||||
// TODO temp added 19.04.2014
|
// TODO temp added 19.04.2014
|
||||||
$self->maniaControl->errorHandler->triggerDebugNotice("Exception line 557 MapList.php" . $e->getMessage());
|
$self->maniaControl->errorHandler->triggerDebugNotice("Exception line 557 MapList.php" . $e->getMessage());
|
||||||
|
|
||||||
@ -662,14 +639,25 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
default:
|
default:
|
||||||
if (substr($actionId, 0, strlen(self::ACTION_PAGING_CHUNKS)) === self::ACTION_PAGING_CHUNKS) {
|
if (substr($actionId, 0, strlen(self::ACTION_PAGING_CHUNKS)) === self::ACTION_PAGING_CHUNKS) {
|
||||||
// Paging chunks
|
// Paging chunks
|
||||||
$neededPage = (int) substr($actionId, strlen(self::ACTION_PAGING_CHUNKS));
|
$neededPage = (int)substr($actionId, strlen(self::ACTION_PAGING_CHUNKS));
|
||||||
$chunk = (int) ($neededPage / self::MAX_PAGES_PER_CHUNK - 0.5);
|
$chunk = (int)($neededPage / self::MAX_PAGES_PER_CHUNK - 0.5);
|
||||||
$this->showMapList($player, null, $chunk, $neededPage);
|
$this->showMapList($player, null, $chunk, $neededPage);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the widget
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function playerCloseWidget(Player $player) {
|
||||||
|
unset($this->mapListShown[$player->login]);
|
||||||
|
unset($this->mapsInListShown[$player->login]);
|
||||||
|
$this->maniaControl->manialinkManager->closeWidget($player);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reopen the widget on Map Begin, MapListChanged, etc.
|
* Reopen the widget on Map Begin, MapListChanged, etc.
|
||||||
*/
|
*/
|
||||||
@ -679,8 +667,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
if ($player) {
|
if ($player) {
|
||||||
$this->showMapList($player);
|
$this->showMapList($player);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
unset($this->mapListShown[$login]);
|
unset($this->mapListShown[$login]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -696,8 +683,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
if ($player) {
|
if ($player) {
|
||||||
$this->showMapList($player);
|
$this->showMapList($player);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
unset($this->mapListShown[$login]);
|
unset($this->mapListShown[$login]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,8 +22,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\StartIndexOutOfBoundException;
|
|||||||
/**
|
/**
|
||||||
* Manager for Maps
|
* Manager for Maps
|
||||||
*
|
*
|
||||||
* @author kremsy & steeffeen
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class MapManager implements CallbackListener {
|
class MapManager implements CallbackListener {
|
||||||
@ -129,55 +129,40 @@ class MapManager implements CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save a Map in the Database
|
* Update a Map from Mania Exchange
|
||||||
*
|
*
|
||||||
* @param \ManiaControl\Maps\Map $map
|
* @param Player $admin
|
||||||
* @return bool
|
* @param string $uid
|
||||||
*/
|
*/
|
||||||
private function saveMap(Map &$map) {
|
public function updateMap(Player $admin, $uid) {
|
||||||
//TODO saveMaps for whole maplist at once (usage of prepared statements)
|
$this->updateMapTimestamp($uid);
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
$mapQuery = "INSERT INTO `" . self::TABLE_MAPS . "` (
|
|
||||||
`uid`,
|
|
||||||
`name`,
|
|
||||||
`authorLogin`,
|
|
||||||
`fileName`,
|
|
||||||
`environment`,
|
|
||||||
`mapType`
|
|
||||||
) VALUES (
|
|
||||||
?, ?, ?, ?, ?, ?
|
|
||||||
) ON DUPLICATE KEY UPDATE
|
|
||||||
`index` = LAST_INSERT_ID(`index`),
|
|
||||||
`fileName` = VALUES(`fileName`),
|
|
||||||
`environment` = VALUES(`environment`),
|
|
||||||
`mapType` = VALUES(`mapType`);";
|
|
||||||
|
|
||||||
$mapStatement = $mysqli->prepare($mapQuery);
|
if (!isset($uid) || !isset($this->maps[$uid])) {
|
||||||
if ($mysqli->error) {
|
trigger_error("Error while updating Map, unknown UID: " . $uid);
|
||||||
trigger_error($mysqli->error);
|
$this->maniaControl->chat->sendError("Error while updating Map.", $admin->login);
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
$mapStatement->bind_param('ssssss', $map->uid, $map->rawName, $map->authorLogin, $map->fileName, $map->environment, $map->mapType);
|
|
||||||
$mapStatement->execute();
|
/** @var Map $map */
|
||||||
if ($mapStatement->error) {
|
$map = $this->maps[$uid];
|
||||||
trigger_error($mapStatement->error);
|
|
||||||
$mapStatement->close();
|
$mxId = $map->mx->id;
|
||||||
return false;
|
$this->removeMap($admin, $uid, true, false);
|
||||||
}
|
$this->addMapFromMx($mxId, $admin->login, true);
|
||||||
$map->index = $mapStatement->insert_id;
|
|
||||||
$mapStatement->close();
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the Timestamp of a map
|
* Update the Timestamp of a Map
|
||||||
*
|
*
|
||||||
* @param $map
|
* @param string $uid
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
private function updateMapTimestamp($uid) {
|
private function updateMapTimestamp($uid) {
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
$mapQuery = "UPDATE `" . self::TABLE_MAPS . "` SET mxid = 0, changed = NOW() WHERE 'uid' = ?";
|
$mapQuery = "UPDATE `" . self::TABLE_MAPS . "` SET
|
||||||
|
mxid = 0,
|
||||||
|
changed = NOW()
|
||||||
|
WHERE 'uid' = ?";
|
||||||
|
|
||||||
$mapStatement = $mysqli->prepare($mapQuery);
|
$mapStatement = $mysqli->prepare($mapQuery);
|
||||||
if ($mysqli->error) {
|
if ($mysqli->error) {
|
||||||
@ -195,30 +180,6 @@ class MapManager implements CallbackListener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates a Map from Mania Exchange
|
|
||||||
*
|
|
||||||
* @param Player $admin
|
|
||||||
* @param $mxId
|
|
||||||
* @param $uid
|
|
||||||
*/
|
|
||||||
public function updateMap(Player $admin, $uid) {
|
|
||||||
$this->updateMapTimestamp($uid);
|
|
||||||
|
|
||||||
if (!isset($uid) || !isset($this->maps[$uid])) {
|
|
||||||
trigger_error("Error while updating Map, unkown UID: " . $uid);
|
|
||||||
$this->maniaControl->chat->sendError("Error while updating Map.", $admin->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @var Map $map */
|
|
||||||
$map = $this->maps[$uid];
|
|
||||||
|
|
||||||
$mxId = $map->mx->id;
|
|
||||||
$this->removeMap($admin, $uid, true, false);
|
|
||||||
$this->addMapFromMx($mxId, $admin->login, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a Map
|
* Remove a Map
|
||||||
*
|
*
|
||||||
@ -245,7 +206,7 @@ class MapManager implements CallbackListener {
|
|||||||
// Remove map
|
// Remove map
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->removeMap($map->fileName);
|
$this->maniaControl->client->removeMap($map->fileName);
|
||||||
} catch(MapNotInCurrentSelectionException $e) {
|
} catch (MapNotInCurrentSelectionException $e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -271,328 +232,6 @@ class MapManager implements CallbackListener {
|
|||||||
unset($this->maps[$uid]);
|
unset($this->maps[$uid]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Restructures the Maplist
|
|
||||||
*/
|
|
||||||
public function restructureMapList() {
|
|
||||||
$currentIndex = $this->getMapIndex($this->currentMap);
|
|
||||||
|
|
||||||
// No RestructureNeeded
|
|
||||||
if ($currentIndex < Maplist::MAX_MAPS_PER_PAGE - 1) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$lowerMapArray = array();
|
|
||||||
$higherMapArray = array();
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
foreach($this->maps as $map) {
|
|
||||||
if ($i < $currentIndex) {
|
|
||||||
$lowerMapArray[] = $map->fileName;
|
|
||||||
} else {
|
|
||||||
$higherMapArray[] = $map->fileName;
|
|
||||||
}
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
$mapArray = array_merge($higherMapArray, $lowerMapArray);
|
|
||||||
array_shift($mapArray);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$this->maniaControl->client->chooseNextMapList($mapArray);
|
|
||||||
} catch(Exception $e) {
|
|
||||||
trigger_error("Error while restructuring the Maplist. " . $e->getMessage());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Shuffles the MapList
|
|
||||||
*
|
|
||||||
* @param Player $admin
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function shuffleMapList($admin = null) {
|
|
||||||
$shuffledMaps = $this->maps;
|
|
||||||
shuffle($shuffledMaps);
|
|
||||||
|
|
||||||
$mapArray = array();
|
|
||||||
|
|
||||||
foreach($shuffledMaps as $map) {
|
|
||||||
/**
|
|
||||||
* @var Map $map
|
|
||||||
*/
|
|
||||||
$mapArray[] = $map->fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$this->maniaControl->client->chooseNextMapList($mapArray);
|
|
||||||
} catch(Exception $e) {
|
|
||||||
//TODO temp added 19.04.2014
|
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 331 MapManager" . $e->getMessage());
|
|
||||||
trigger_error("Couldn't shuffle mapList. " . $e->getMessage());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->fetchCurrentMap();
|
|
||||||
|
|
||||||
if ($admin) {
|
|
||||||
$message = '$<' . $admin->nickname . '$> shuffled the Maplist!';
|
|
||||||
$this->maniaControl->chat->sendSuccess($message);
|
|
||||||
$this->maniaControl->log($message, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restructure if needed
|
|
||||||
$this->restructureMapList();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes a Map
|
|
||||||
*
|
|
||||||
* @param $rpcMap
|
|
||||||
* @return Map
|
|
||||||
*/
|
|
||||||
public function initializeMap($rpcMap) {
|
|
||||||
$map = new Map($rpcMap);
|
|
||||||
$this->saveMap($map);
|
|
||||||
|
|
||||||
/*$mapsDirectory = $this->maniaControl->server->getMapsDirectory();
|
|
||||||
if (is_readable($mapsDirectory . $map->fileName)) {
|
|
||||||
$mapFetcher = new \GBXChallMapFetcher(true);
|
|
||||||
$mapFetcher->processFile($mapsDirectory . $map->fileName);
|
|
||||||
$map->authorNick = FORMATTER::stripDirtyCodes($mapFetcher->authorNick);
|
|
||||||
$map->authorEInfo = $mapFetcher->authorEInfo;
|
|
||||||
$map->authorZone = $mapFetcher->authorZone;
|
|
||||||
$map->comment = $mapFetcher->comment;
|
|
||||||
}*/
|
|
||||||
return $map;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the full Map list, needed on Init, addMap and on ShuffleMaps
|
|
||||||
*/
|
|
||||||
private function updateFullMapList() {
|
|
||||||
$tempList = array();
|
|
||||||
|
|
||||||
try {
|
|
||||||
$i = 0;
|
|
||||||
while(true) {
|
|
||||||
$maps = $this->maniaControl->client->getMapList(150, $i);
|
|
||||||
|
|
||||||
foreach($maps as $rpcMap) {
|
|
||||||
if (array_key_exists($rpcMap->uId, $this->maps)) {
|
|
||||||
// Map already exists, only update index
|
|
||||||
$tempList[$rpcMap->uId] = $this->maps[$rpcMap->uId];
|
|
||||||
} else { // Insert Map Object
|
|
||||||
$map = $this->initializeMap($rpcMap);
|
|
||||||
$tempList[$map->uid] = $map;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$i += 150;
|
|
||||||
}
|
|
||||||
} catch(StartIndexOutOfBoundException $e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
// restore Sorted MapList
|
|
||||||
$this->maps = $tempList;
|
|
||||||
|
|
||||||
// Trigger own callback
|
|
||||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_MAPS_UPDATED);
|
|
||||||
|
|
||||||
// Write MapList
|
|
||||||
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_AUTOSAVE_MAPLIST)) {
|
|
||||||
try {
|
|
||||||
$this->maniaControl->client->saveMatchSettings($this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIST_FILE));
|
|
||||||
} catch(CouldNotWritePlaylistFileException $e) {
|
|
||||||
$this->maniaControl->log("Unable to write the playlist file, please checkout your MX-Folders File permissions!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Freshly fetch current Map
|
|
||||||
*
|
|
||||||
* @return Map
|
|
||||||
*/
|
|
||||||
private function fetchCurrentMap() {
|
|
||||||
$rpcMap = $this->maniaControl->client->getCurrentMapInfo();
|
|
||||||
|
|
||||||
if (array_key_exists($rpcMap->uId, $this->maps)) {
|
|
||||||
$this->currentMap = $this->maps[$rpcMap->uId];
|
|
||||||
$this->currentMap->nbCheckpoints = $rpcMap->nbCheckpoints;
|
|
||||||
$this->currentMap->nbLaps = $rpcMap->nbLaps;
|
|
||||||
return $this->currentMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->currentMap = $this->initializeMap($rpcMap);
|
|
||||||
$this->maps[$this->currentMap->uid] = $this->currentMap;
|
|
||||||
return $this->currentMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle OnInit callback
|
|
||||||
*/
|
|
||||||
public function handleOnInit() {
|
|
||||||
$this->updateFullMapList();
|
|
||||||
$this->fetchCurrentMap();
|
|
||||||
|
|
||||||
// Restructure Maplist
|
|
||||||
$this->restructureMapList();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle AfterInit callback
|
|
||||||
*/
|
|
||||||
public function handleAfterInit() {
|
|
||||||
// Fetch MX infos
|
|
||||||
$this->mxManager->fetchManiaExchangeMapInformations();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Current Map
|
|
||||||
*
|
|
||||||
* @return Map currentMap
|
|
||||||
*/
|
|
||||||
public function getCurrentMap() {
|
|
||||||
if (!$this->currentMap) {
|
|
||||||
return $this->fetchCurrentMap();
|
|
||||||
}
|
|
||||||
return $this->currentMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns map By UID
|
|
||||||
*
|
|
||||||
* @param $uid
|
|
||||||
* @return Map array
|
|
||||||
*/
|
|
||||||
public function getMapByUid($uid) {
|
|
||||||
if (!isset($this->maps[$uid])) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return $this->maps[$uid];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle BeginMap callback
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function handleBeginMap(array $callback) {
|
|
||||||
if ($this->mapBegan) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$this->mapBegan = true;
|
|
||||||
$this->mapEnded = false;
|
|
||||||
|
|
||||||
if (!isset($callback[1][0]["UId"])) {
|
|
||||||
$this->currentMap = $this->fetchCurrentMap();
|
|
||||||
} else if (array_key_exists($callback[1][0]["UId"], $this->maps)) {
|
|
||||||
// Map already exists, only update index
|
|
||||||
$this->currentMap = $this->maps[$callback[1][0]["UId"]];
|
|
||||||
if (!$this->currentMap->nbCheckpoints || !$this->currentMap->nbLaps) {
|
|
||||||
$rpcMap = $this->maniaControl->client->getCurrentMapInfo();
|
|
||||||
$this->currentMap->nbLaps = $rpcMap->nbLaps;
|
|
||||||
$this->currentMap->nbCheckpoints = $rpcMap->nbCheckpoints;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restructure MapList if id is over 15
|
|
||||||
$this->restructureMapList();
|
|
||||||
|
|
||||||
// Update the mx of the map (for update checks, etc.)
|
|
||||||
$this->mxManager->fetchManiaExchangeMapInformations($this->currentMap);
|
|
||||||
|
|
||||||
// Trigger own BeginMap callback (
|
|
||||||
//TODO remove deprecated callback later
|
|
||||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_BEGINMAP, $this->currentMap);
|
|
||||||
$this->maniaControl->callbackManager->triggerCallback(Callbacks::BEGINMAP, $this->currentMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle Script BeginMap callback
|
|
||||||
*
|
|
||||||
* @param int $mapNumber
|
|
||||||
*/
|
|
||||||
public function handleScriptBeginMap($mapNumber) {
|
|
||||||
$this->handleBeginMap(array());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle EndMap Callback
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function handleEndMap(array $callback) {
|
|
||||||
if ($this->mapEnded) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$this->mapEnded = true;
|
|
||||||
$this->mapBegan = false;
|
|
||||||
|
|
||||||
// Trigger own EndMap callback
|
|
||||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_ENDMAP, $this->currentMap);
|
|
||||||
//TODO remove deprecated callback later
|
|
||||||
$this->maniaControl->callbackManager->triggerCallback(Callbacks::ENDMAP, $this->currentMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle Script EndMap Callback
|
|
||||||
*
|
|
||||||
* @param int $mapNumber
|
|
||||||
*/
|
|
||||||
public function handleScriptEndMap($mapNumber) {
|
|
||||||
$this->handleEndMap(array());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle Maps Modified Callback
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function mapsModified(array $callback) {
|
|
||||||
$this->updateFullMapList();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all Maps
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getMaps($offset = null, $length = null) {
|
|
||||||
if ($offset === null) {
|
|
||||||
return array_values($this->maps);
|
|
||||||
}
|
|
||||||
if ($length === null) {
|
|
||||||
return array_slice($this->maps, $offset);
|
|
||||||
}
|
|
||||||
return array_slice($this->maps, $offset, $length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Number of Maps
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getMapsCount() {
|
|
||||||
return count($this->maps);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the MapIndex of a given map
|
|
||||||
*
|
|
||||||
* @param Map $map
|
|
||||||
* @internal param $uid
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function getMapIndex(Map $map) {
|
|
||||||
$maps = $this->getMaps();
|
|
||||||
return array_search($map, $maps);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a Map from Mania Exchange
|
* Adds a Map from Mania Exchange
|
||||||
*
|
*
|
||||||
@ -668,7 +307,7 @@ class MapManager implements CallbackListener {
|
|||||||
// Write map via write file method
|
// Write map via write file method
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->writeFileFromString($relativeMapFileName, $file);
|
$this->maniaControl->client->writeFileFromString($relativeMapFileName, $file);
|
||||||
} catch(InvalidArgumentException $e) {
|
} catch (InvalidArgumentException $e) {
|
||||||
if ($e->getMessage() == 'data are too big') {
|
if ($e->getMessage() == 'data are too big') {
|
||||||
$this->maniaControl->chat->sendError("Map is too big for a remote save.", $login);
|
$this->maniaControl->chat->sendError("Map is too big for a remote save.", $login);
|
||||||
return;
|
return;
|
||||||
@ -680,7 +319,7 @@ class MapManager implements CallbackListener {
|
|||||||
// Check for valid map
|
// Check for valid map
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->checkMapForCurrentServerParams($relativeMapFileName);
|
$this->maniaControl->client->checkMapForCurrentServerParams($relativeMapFileName);
|
||||||
} catch(MapNotCompatibleOrCompleteException $e) {
|
} catch (MapNotCompatibleOrCompleteException $e) {
|
||||||
trigger_error("Couldn't check if map is valid ('{$relativeMapFileName}'). " . $e->getMessage());
|
trigger_error("Couldn't check if map is valid ('{$relativeMapFileName}'). " . $e->getMessage());
|
||||||
$this->maniaControl->chat->sendError('Wrong MapType or not validated!', $login);
|
$this->maniaControl->chat->sendError('Wrong MapType or not validated!', $login);
|
||||||
return;
|
return;
|
||||||
@ -715,5 +354,370 @@ class MapManager implements CallbackListener {
|
|||||||
$this->maniaControl->log($message, true);
|
$this->maniaControl->log($message, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns map By UID
|
||||||
|
*
|
||||||
|
* @param $uid
|
||||||
|
* @return Map array
|
||||||
|
*/
|
||||||
|
public function getMapByUid($uid) {
|
||||||
|
if (!isset($this->maps[$uid])) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return $this->maps[$uid];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the full Map list, needed on Init, addMap and on ShuffleMaps
|
||||||
|
*/
|
||||||
|
private function updateFullMapList() {
|
||||||
|
$tempList = array();
|
||||||
|
|
||||||
|
try {
|
||||||
|
$i = 0;
|
||||||
|
while (true) {
|
||||||
|
$maps = $this->maniaControl->client->getMapList(150, $i);
|
||||||
|
|
||||||
|
foreach ($maps as $rpcMap) {
|
||||||
|
if (array_key_exists($rpcMap->uId, $this->maps)) {
|
||||||
|
// Map already exists, only update index
|
||||||
|
$tempList[$rpcMap->uId] = $this->maps[$rpcMap->uId];
|
||||||
|
} else { // Insert Map Object
|
||||||
|
$map = $this->initializeMap($rpcMap);
|
||||||
|
$tempList[$map->uid] = $map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$i += 150;
|
||||||
|
}
|
||||||
|
} catch (StartIndexOutOfBoundException $e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// restore Sorted MapList
|
||||||
|
$this->maps = $tempList;
|
||||||
|
|
||||||
|
// Trigger own callback
|
||||||
|
$this->maniaControl->callbackManager->triggerCallback(self::CB_MAPS_UPDATED);
|
||||||
|
|
||||||
|
// Write MapList
|
||||||
|
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_AUTOSAVE_MAPLIST)) {
|
||||||
|
try {
|
||||||
|
$this->maniaControl->client->saveMatchSettings($this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIST_FILE));
|
||||||
|
} catch (CouldNotWritePlaylistFileException $e) {
|
||||||
|
$this->maniaControl->log("Unable to write the playlist file, please checkout your MX-Folders File permissions!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a Map
|
||||||
|
*
|
||||||
|
* @param $rpcMap
|
||||||
|
* @return Map
|
||||||
|
*/
|
||||||
|
public function initializeMap($rpcMap) {
|
||||||
|
$map = new Map($rpcMap);
|
||||||
|
$this->saveMap($map);
|
||||||
|
|
||||||
|
/*$mapsDirectory = $this->maniaControl->server->getMapsDirectory();
|
||||||
|
if (is_readable($mapsDirectory . $map->fileName)) {
|
||||||
|
$mapFetcher = new \GBXChallMapFetcher(true);
|
||||||
|
$mapFetcher->processFile($mapsDirectory . $map->fileName);
|
||||||
|
$map->authorNick = FORMATTER::stripDirtyCodes($mapFetcher->authorNick);
|
||||||
|
$map->authorEInfo = $mapFetcher->authorEInfo;
|
||||||
|
$map->authorZone = $mapFetcher->authorZone;
|
||||||
|
$map->comment = $mapFetcher->comment;
|
||||||
|
}*/
|
||||||
|
return $map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save a Map in the Database
|
||||||
|
*
|
||||||
|
* @param \ManiaControl\Maps\Map $map
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function saveMap(Map &$map) {
|
||||||
|
//TODO saveMaps for whole maplist at once (usage of prepared statements)
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
$mapQuery = "INSERT INTO `" . self::TABLE_MAPS . "` (
|
||||||
|
`uid`,
|
||||||
|
`name`,
|
||||||
|
`authorLogin`,
|
||||||
|
`fileName`,
|
||||||
|
`environment`,
|
||||||
|
`mapType`
|
||||||
|
) VALUES (
|
||||||
|
?, ?, ?, ?, ?, ?
|
||||||
|
) ON DUPLICATE KEY UPDATE
|
||||||
|
`index` = LAST_INSERT_ID(`index`),
|
||||||
|
`fileName` = VALUES(`fileName`),
|
||||||
|
`environment` = VALUES(`environment`),
|
||||||
|
`mapType` = VALUES(`mapType`);";
|
||||||
|
|
||||||
|
$mapStatement = $mysqli->prepare($mapQuery);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$mapStatement->bind_param('ssssss', $map->uid, $map->rawName, $map->authorLogin, $map->fileName, $map->environment, $map->mapType);
|
||||||
|
$mapStatement->execute();
|
||||||
|
if ($mapStatement->error) {
|
||||||
|
trigger_error($mapStatement->error);
|
||||||
|
$mapStatement->close();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$map->index = $mapStatement->insert_id;
|
||||||
|
$mapStatement->close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuffles the MapList
|
||||||
|
*
|
||||||
|
* @param Player $admin
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function shuffleMapList($admin = null) {
|
||||||
|
$shuffledMaps = $this->maps;
|
||||||
|
shuffle($shuffledMaps);
|
||||||
|
|
||||||
|
$mapArray = array();
|
||||||
|
|
||||||
|
foreach ($shuffledMaps as $map) {
|
||||||
|
/**
|
||||||
|
* @var Map $map
|
||||||
|
*/
|
||||||
|
$mapArray[] = $map->fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->maniaControl->client->chooseNextMapList($mapArray);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
//TODO temp added 19.04.2014
|
||||||
|
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 331 MapManager" . $e->getMessage());
|
||||||
|
trigger_error("Couldn't shuffle mapList. " . $e->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->fetchCurrentMap();
|
||||||
|
|
||||||
|
if ($admin) {
|
||||||
|
$message = '$<' . $admin->nickname . '$> shuffled the Maplist!';
|
||||||
|
$this->maniaControl->chat->sendSuccess($message);
|
||||||
|
$this->maniaControl->log($message, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restructure if needed
|
||||||
|
$this->restructureMapList();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Freshly fetch current Map
|
||||||
|
*
|
||||||
|
* @return Map
|
||||||
|
*/
|
||||||
|
private function fetchCurrentMap() {
|
||||||
|
$rpcMap = $this->maniaControl->client->getCurrentMapInfo();
|
||||||
|
|
||||||
|
if (array_key_exists($rpcMap->uId, $this->maps)) {
|
||||||
|
$this->currentMap = $this->maps[$rpcMap->uId];
|
||||||
|
$this->currentMap->nbCheckpoints = $rpcMap->nbCheckpoints;
|
||||||
|
$this->currentMap->nbLaps = $rpcMap->nbLaps;
|
||||||
|
return $this->currentMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->currentMap = $this->initializeMap($rpcMap);
|
||||||
|
$this->maps[$this->currentMap->uid] = $this->currentMap;
|
||||||
|
return $this->currentMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restructures the Maplist
|
||||||
|
*/
|
||||||
|
public function restructureMapList() {
|
||||||
|
$currentIndex = $this->getMapIndex($this->currentMap);
|
||||||
|
|
||||||
|
// No RestructureNeeded
|
||||||
|
if ($currentIndex < Maplist::MAX_MAPS_PER_PAGE - 1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$lowerMapArray = array();
|
||||||
|
$higherMapArray = array();
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
foreach ($this->maps as $map) {
|
||||||
|
if ($i < $currentIndex) {
|
||||||
|
$lowerMapArray[] = $map->fileName;
|
||||||
|
} else {
|
||||||
|
$higherMapArray[] = $map->fileName;
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mapArray = array_merge($higherMapArray, $lowerMapArray);
|
||||||
|
array_shift($mapArray);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->maniaControl->client->chooseNextMapList($mapArray);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
trigger_error("Error while restructuring the Maplist. " . $e->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the MapIndex of a given map
|
||||||
|
*
|
||||||
|
* @param Map $map
|
||||||
|
* @internal param $uid
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getMapIndex(Map $map) {
|
||||||
|
$maps = $this->getMaps();
|
||||||
|
return array_search($map, $maps);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Maps
|
||||||
|
*
|
||||||
|
* @param int $offset
|
||||||
|
* @param int $length
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getMaps($offset = null, $length = null) {
|
||||||
|
if ($offset === null) {
|
||||||
|
return array_values($this->maps);
|
||||||
|
}
|
||||||
|
if ($length === null) {
|
||||||
|
return array_slice($this->maps, $offset);
|
||||||
|
}
|
||||||
|
return array_slice($this->maps, $offset, $length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle OnInit callback
|
||||||
|
*/
|
||||||
|
public function handleOnInit() {
|
||||||
|
$this->updateFullMapList();
|
||||||
|
$this->fetchCurrentMap();
|
||||||
|
|
||||||
|
// Restructure Maplist
|
||||||
|
$this->restructureMapList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle AfterInit callback
|
||||||
|
*/
|
||||||
|
public function handleAfterInit() {
|
||||||
|
// Fetch MX infos
|
||||||
|
$this->mxManager->fetchManiaExchangeMapInformations();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Current Map
|
||||||
|
*
|
||||||
|
* @return Map currentMap
|
||||||
|
*/
|
||||||
|
public function getCurrentMap() {
|
||||||
|
if (!$this->currentMap) {
|
||||||
|
return $this->fetchCurrentMap();
|
||||||
|
}
|
||||||
|
return $this->currentMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle Script BeginMap callback
|
||||||
|
*
|
||||||
|
* @param int $mapNumber
|
||||||
|
*/
|
||||||
|
public function handleScriptBeginMap($mapNumber) {
|
||||||
|
$this->handleBeginMap(array());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle BeginMap callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function handleBeginMap(array $callback) {
|
||||||
|
if ($this->mapBegan) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->mapBegan = true;
|
||||||
|
$this->mapEnded = false;
|
||||||
|
|
||||||
|
if (!isset($callback[1][0]["UId"])) {
|
||||||
|
$this->currentMap = $this->fetchCurrentMap();
|
||||||
|
} else if (array_key_exists($callback[1][0]["UId"], $this->maps)) {
|
||||||
|
// Map already exists, only update index
|
||||||
|
$this->currentMap = $this->maps[$callback[1][0]["UId"]];
|
||||||
|
if (!$this->currentMap->nbCheckpoints || !$this->currentMap->nbLaps) {
|
||||||
|
$rpcMap = $this->maniaControl->client->getCurrentMapInfo();
|
||||||
|
$this->currentMap->nbLaps = $rpcMap->nbLaps;
|
||||||
|
$this->currentMap->nbCheckpoints = $rpcMap->nbCheckpoints;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restructure MapList if id is over 15
|
||||||
|
$this->restructureMapList();
|
||||||
|
|
||||||
|
// Update the mx of the map (for update checks, etc.)
|
||||||
|
$this->mxManager->fetchManiaExchangeMapInformations($this->currentMap);
|
||||||
|
|
||||||
|
// Trigger own BeginMap callback (
|
||||||
|
//TODO remove deprecated callback later
|
||||||
|
$this->maniaControl->callbackManager->triggerCallback(self::CB_BEGINMAP, $this->currentMap);
|
||||||
|
$this->maniaControl->callbackManager->triggerCallback(Callbacks::BEGINMAP, $this->currentMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle Script EndMap Callback
|
||||||
|
*
|
||||||
|
* @param int $mapNumber
|
||||||
|
*/
|
||||||
|
public function handleScriptEndMap($mapNumber) {
|
||||||
|
$this->handleEndMap(array());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle EndMap Callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function handleEndMap(array $callback) {
|
||||||
|
if ($this->mapEnded) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->mapEnded = true;
|
||||||
|
$this->mapBegan = false;
|
||||||
|
|
||||||
|
// Trigger own EndMap callback
|
||||||
|
$this->maniaControl->callbackManager->triggerCallback(self::CB_ENDMAP, $this->currentMap);
|
||||||
|
//TODO remove deprecated callback later
|
||||||
|
$this->maniaControl->callbackManager->triggerCallback(Callbacks::ENDMAP, $this->currentMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle Maps Modified Callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function mapsModified(array $callback) {
|
||||||
|
$this->updateFullMapList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Number of Maps
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getMapsCount() {
|
||||||
|
return count($this->maps);
|
||||||
|
}
|
||||||
// TODO: add local map by filename
|
// TODO: add local map by filename
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,8 @@ use ManiaControl\Players\Player;
|
|||||||
/**
|
/**
|
||||||
* MapQueue Class
|
* MapQueue Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class MapQueue implements CallbackListener, CommandListener {
|
class MapQueue implements CallbackListener, CommandListener {
|
||||||
@ -90,6 +90,34 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
$this->clearMapQueue($admin);
|
$this->clearMapQueue($admin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the Map Queue
|
||||||
|
*
|
||||||
|
* @param $admin
|
||||||
|
*/
|
||||||
|
public function clearMapQueue($admin) {
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($admin);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($this->queuedMaps) == 0) {
|
||||||
|
$this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $admin->login);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$title = $this->maniaControl->authenticationManager->getAuthLevelName($admin->authLevel);
|
||||||
|
|
||||||
|
//Destroy map - queue list
|
||||||
|
$this->queuedMaps = array();
|
||||||
|
|
||||||
|
$this->maniaControl->chat->sendInformation('$fa0' . $title . ' $<$fff' . $admin->nickname . '$> cleared the Queued-Map list!');
|
||||||
|
$this->maniaControl->log($title . ' ' . Formatter::stripCodes($admin->nickname) . ' cleared the Queued-Map list!');
|
||||||
|
|
||||||
|
// Trigger callback
|
||||||
|
$this->maniaControl->callbackManager->triggerCallback(self::CB_MAPQUEUE_CHANGED, array('clear'));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles the mapqueue/jukebox command
|
* Handles the mapqueue/jukebox command
|
||||||
*
|
*
|
||||||
@ -99,12 +127,12 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
public function command_MapQueue(array $chat, Player $player) {
|
public function command_MapQueue(array $chat, Player $player) {
|
||||||
$chatCommands = explode(' ', $chat[1][2]);
|
$chatCommands = explode(' ', $chat[1][2]);
|
||||||
|
|
||||||
if(isset($chatCommands[1])) {
|
if (isset($chatCommands[1])) {
|
||||||
if($chatCommands[1] == ' ' || $chatCommands[1] == 'list') {
|
if ($chatCommands[1] == ' ' || $chatCommands[1] == 'list') {
|
||||||
$this->showMapQueue($player);
|
$this->showMapQueue($player);
|
||||||
} elseif($chatCommands[1] == 'display') {
|
} elseif ($chatCommands[1] == 'display') {
|
||||||
$this->showMapQueueManialink($player);
|
$this->showMapQueueManialink($player);
|
||||||
} elseif($chatCommands[1] == 'clear') {
|
} elseif ($chatCommands[1] == 'clear') {
|
||||||
$this->clearMapQueue($player);
|
$this->clearMapQueue($player);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -118,15 +146,15 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
* @param $player
|
* @param $player
|
||||||
*/
|
*/
|
||||||
public function showMapQueue($player) {
|
public function showMapQueue($player) {
|
||||||
if(count($this->queuedMaps) == 0) {
|
if (count($this->queuedMaps) == 0) {
|
||||||
$this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $player->login);
|
$this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $player->login);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$message = '$fa0Upcoming maps in the Map-Queue:';
|
$message = '$fa0Upcoming maps in the Map-Queue:';
|
||||||
$i = 1;
|
$i = 1;
|
||||||
foreach($this->queuedMaps as $queuedMap) {
|
foreach ($this->queuedMaps as $queuedMap) {
|
||||||
$message .= ' $<$fff'.$i.'$>. [$<$fff'.Formatter::stripCodes($queuedMap[1]->name).'$>]';
|
$message .= ' $<$fff' . $i . '$>. [$<$fff' . Formatter::stripCodes($queuedMap[1]->name) . '$>]';
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,13 +167,13 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
* @param $player
|
* @param $player
|
||||||
*/
|
*/
|
||||||
public function showMapQueueManialink($player) {
|
public function showMapQueueManialink($player) {
|
||||||
if(count($this->queuedMaps) == 0) {
|
if (count($this->queuedMaps) == 0) {
|
||||||
$this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $player->login);
|
$this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $player->login);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$maps = array();
|
$maps = array();
|
||||||
foreach($this->queuedMaps as $queuedMap) {
|
foreach ($this->queuedMaps as $queuedMap) {
|
||||||
$maps[] = $queuedMap[1];
|
$maps[] = $queuedMap[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,34 +189,6 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
return $this->buffer;
|
return $this->buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears the Map Queue
|
|
||||||
*
|
|
||||||
* @param $admin
|
|
||||||
*/
|
|
||||||
public function clearMapQueue($admin) {
|
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
|
|
||||||
$this->maniaControl->authenticationManager->sendNotAllowed($admin);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(count($this->queuedMaps) == 0) {
|
|
||||||
$this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $admin->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$title = $this->maniaControl->authenticationManager->getAuthLevelName($admin->authLevel);
|
|
||||||
|
|
||||||
//Destroy map - queue list
|
|
||||||
$this->queuedMaps = array();
|
|
||||||
|
|
||||||
$this->maniaControl->chat->sendInformation('$fa0'. $title . ' $<$fff' . $admin->nickname . '$> cleared the Queued-Map list!');
|
|
||||||
$this->maniaControl->log($title . ' ' . Formatter::stripCodes($admin->nickname) . ' cleared the Queued-Map list!');
|
|
||||||
|
|
||||||
// Trigger callback
|
|
||||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_MAPQUEUE_CHANGED, array('clear'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds map as first map in queue (for /replay)
|
* Adds map as first map in queue (for /replay)
|
||||||
*
|
*
|
||||||
@ -216,15 +216,13 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
|
|
||||||
//Check if player is allowed to add (another) map
|
//Check if player is allowed to add (another) map
|
||||||
$admin = false;
|
$admin = false;
|
||||||
if($this->maniaControl->authenticationManager->checkRight($player, 2) ||
|
if ($this->maniaControl->authenticationManager->checkRight($player, 2) || $this->maniaControl->authenticationManager->checkRight($player, 3) || $this->maniaControl->authenticationManager->checkRight($player, 4)) {
|
||||||
$this->maniaControl->authenticationManager->checkRight($player, 3) ||
|
|
||||||
$this->maniaControl->authenticationManager->checkRight($player, 4)) {
|
|
||||||
$admin = true;
|
$admin = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$mapsForPlayer = 0;
|
$mapsForPlayer = 0;
|
||||||
foreach($this->queuedMaps as $queuedMap) {
|
foreach ($this->queuedMaps as $queuedMap) {
|
||||||
if($queuedMap[0]->login == $login) {
|
if ($queuedMap[0]->login == $login) {
|
||||||
$mapsForPlayer++;
|
$mapsForPlayer++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -232,14 +230,14 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
$maxPlayer = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIMIT_PLAYER);
|
$maxPlayer = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIMIT_PLAYER);
|
||||||
$maxAdmin = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIMIT_ADMIN);
|
$maxAdmin = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIMIT_ADMIN);
|
||||||
|
|
||||||
if($admin && $maxAdmin != -1) {
|
if ($admin && $maxAdmin != -1) {
|
||||||
if($mapsForPlayer == $maxAdmin) {
|
if ($mapsForPlayer == $maxAdmin) {
|
||||||
$this->maniaControl->chat->sendError('You already have $<$fff'.$maxAdmin.'$> map(s) in the Map-Queue!', $login);
|
$this->maniaControl->chat->sendError('You already have $<$fff' . $maxAdmin . '$> map(s) in the Map-Queue!', $login);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} elseif(!$admin && $maxPlayer != -1) {
|
} elseif (!$admin && $maxPlayer != -1) {
|
||||||
if($mapsForPlayer == $maxPlayer) {
|
if ($mapsForPlayer == $maxPlayer) {
|
||||||
$this->maniaControl->chat->sendError('You already have $<$fff'.$maxPlayer.'$> map(s) in the Map-Queue!', $login);
|
$this->maniaControl->chat->sendError('You already have $<$fff' . $maxPlayer . '$> map(s) in the Map-Queue!', $login);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -252,7 +250,7 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
|
|
||||||
//TODO recently maps not able to add to queue-amps setting, and management
|
//TODO recently maps not able to add to queue-amps setting, and management
|
||||||
// Check if map is in the buffer
|
// Check if map is in the buffer
|
||||||
if(in_array($uid, $this->buffer)) {
|
if (in_array($uid, $this->buffer)) {
|
||||||
$this->maniaControl->chat->sendError('That map has recently been played!', $login);
|
$this->maniaControl->chat->sendError('That map has recently been played!', $login);
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
|
||||||
return;
|
return;
|
||||||
@ -297,10 +295,10 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
*/
|
*/
|
||||||
public function endMap(Map $map) {
|
public function endMap(Map $map) {
|
||||||
$this->nextMap = null;
|
$this->nextMap = null;
|
||||||
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_SKIP_MAP_ON_LEAVE) == TRUE) {
|
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_SKIP_MAP_ON_LEAVE) == true) {
|
||||||
|
|
||||||
//Skip Map if requester has left
|
//Skip Map if requester has left
|
||||||
foreach($this->queuedMaps as $queuedMap) {
|
foreach ($this->queuedMaps as $queuedMap) {
|
||||||
$player = $queuedMap[0];
|
$player = $queuedMap[0];
|
||||||
|
|
||||||
//found player, so play this map
|
//found player, so play this map
|
||||||
@ -308,7 +306,7 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_SKIP_MAPQUEUE_ADMIN) == FALSE) {
|
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_SKIP_MAPQUEUE_ADMIN) == false) {
|
||||||
//Check if the queuer is a admin
|
//Check if the queuer is a admin
|
||||||
if ($player->authLevel > 0) {
|
if ($player->authLevel > 0) {
|
||||||
break;
|
break;
|
||||||
@ -321,7 +319,7 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
//Player not found, so remove the map from the mapqueue
|
//Player not found, so remove the map from the mapqueue
|
||||||
array_shift($this->queuedMaps);
|
array_shift($this->queuedMaps);
|
||||||
|
|
||||||
$this->maniaControl->chat->sendInformation('$fa0$<$fff' . $queuedMap[0]->name .'$> is skipped because $<' . $player->nickname . '$> left the game!');
|
$this->maniaControl->chat->sendInformation('$fa0$<$fff' . $queuedMap[0]->name . '$> is skipped because $<' . $player->nickname . '$> left the game!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +330,7 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$map = $this->nextMap[1];
|
$map = $this->nextMap[1];
|
||||||
$this->maniaControl->chat->sendInformation('$fa0Next map will be $<$fff' . $map->name .'$> as requested by $<' . $this->nextMap[0]->nickname . '$>.');
|
$this->maniaControl->chat->sendInformation('$fa0Next map will be $<$fff' . $map->name . '$> as requested by $<' . $this->nextMap[0]->nickname . '$>.');
|
||||||
|
|
||||||
$this->maniaControl->client->chooseNextMap($map->fileName);
|
$this->maniaControl->client->chooseNextMap($map->fileName);
|
||||||
}
|
}
|
||||||
@ -343,11 +341,11 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
* @param Map $map
|
* @param Map $map
|
||||||
*/
|
*/
|
||||||
public function beginMap(Map $map) {
|
public function beginMap(Map $map) {
|
||||||
if(in_array($map->uid, $this->buffer)) {
|
if (in_array($map->uid, $this->buffer)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(count($this->buffer) >= $this->maniaControl->settingManager->getSetting($this, self::SETTING_BUFFERSIZE)) {
|
if (count($this->buffer) >= $this->maniaControl->settingManager->getSetting($this, self::SETTING_BUFFERSIZE)) {
|
||||||
array_shift($this->buffer);
|
array_shift($this->buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -370,7 +368,7 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
* @return array(Player $player, Map $map)
|
* @return array(Player $player, Map $map)
|
||||||
*/
|
*/
|
||||||
public function getNextQueuedMap() {
|
public function getNextQueuedMap() {
|
||||||
foreach($this->queuedMaps as $queuedMap) {
|
foreach ($this->queuedMaps as $queuedMap) {
|
||||||
//return the first Queued Map
|
//return the first Queued Map
|
||||||
return $queuedMap;
|
return $queuedMap;
|
||||||
}
|
}
|
||||||
@ -385,7 +383,7 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
public function getQueuedMapsRanking() {
|
public function getQueuedMapsRanking() {
|
||||||
$i = 1;
|
$i = 1;
|
||||||
$queuedMaps = array();
|
$queuedMaps = array();
|
||||||
foreach($this->queuedMaps as $queuedMap) {
|
foreach ($this->queuedMaps as $queuedMap) {
|
||||||
$map = $queuedMap[1];
|
$map = $queuedMap[1];
|
||||||
$queuedMaps[$map->uid] = $i;
|
$queuedMaps[$map->uid] = $i;
|
||||||
$i++;
|
$i++;
|
||||||
@ -407,7 +405,7 @@ class MapQueue implements CallbackListener, CommandListener {
|
|||||||
* Dummy Function for testing
|
* Dummy Function for testing
|
||||||
*/
|
*/
|
||||||
public function printAllMaps() {
|
public function printAllMaps() {
|
||||||
foreach($this->queuedMaps as $map) {
|
foreach ($this->queuedMaps as $map) {
|
||||||
$map = $map[1];
|
$map = $map[1];
|
||||||
var_dump($map->name);
|
var_dump($map->name);
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,8 @@ use ManiaControl\Formatter;
|
|||||||
/**
|
/**
|
||||||
* Player Model Class
|
* Player Model Class
|
||||||
*
|
*
|
||||||
* @author kremsy & steeffeen
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class Player {
|
class Player {
|
||||||
|
@ -21,8 +21,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\PlayerNotIgnoredException;
|
|||||||
/**
|
/**
|
||||||
* Player Actions Class
|
* Player Actions Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PlayerActions {
|
class PlayerActions {
|
||||||
@ -70,50 +70,6 @@ class PlayerActions {
|
|||||||
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_FORCE_PLAYER_SPEC, AuthenticationManager::AUTH_LEVEL_MODERATOR);
|
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_FORCE_PLAYER_SPEC, AuthenticationManager::AUTH_LEVEL_MODERATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Force a Player to Play
|
|
||||||
*
|
|
||||||
* @param string $adminLogin
|
|
||||||
* @param string $targetLogin
|
|
||||||
* @param bool $userIsAbleToSelect
|
|
||||||
* @param bool $displayAnnouncement
|
|
||||||
* @internal param int $type
|
|
||||||
*/
|
|
||||||
public function forcePlayerToPlay($adminLogin, $targetLogin, $userIsAbleToSelect = true, $displayAnnouncement = true) {
|
|
||||||
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
|
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_FORCE_PLAYER_PLAY)) {
|
|
||||||
$this->maniaControl->authenticationManager->sendNotAllowed($admin);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$target = $this->maniaControl->playerManager->getPlayer($targetLogin);
|
|
||||||
if (!$target) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$this->maniaControl->client->forceSpectator($target->login, self::SPECTATOR_PLAYER);
|
|
||||||
} catch(FaultException $e) {
|
|
||||||
//TODO exception 'There are too many players' appeared 28.04.2014, wait for more before add to faultexception
|
|
||||||
$this->maniaControl->chat->sendException($e, $admin->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($userIsAbleToSelect) {
|
|
||||||
try {
|
|
||||||
$this->maniaControl->client->forceSpectator($target->login, self::SPECTATOR_USER_SELECTABLE);
|
|
||||||
} catch(Exception $e) {
|
|
||||||
$this->maniaControl->chat->sendException($e, $admin->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Announce force
|
|
||||||
if ($displayAnnouncement) {
|
|
||||||
$chatMessage = '$<' . $admin->nickname . '$> forced $<' . $target->nickname . '$> to Play!';
|
|
||||||
$this->maniaControl->chat->sendInformation($chatMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Force a Player to a certain Team
|
* Force a Player to a certain Team
|
||||||
*
|
*
|
||||||
@ -138,7 +94,7 @@ class PlayerActions {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->forcePlayerTeam($target->login, $teamId);
|
$this->maniaControl->client->forcePlayerTeam($target->login, $teamId);
|
||||||
} catch(NotInTeamModeException $e) {
|
} catch (NotInTeamModeException $e) {
|
||||||
$this->forcePlayerToPlay($adminLogin, $targetLogin);
|
$this->forcePlayerToPlay($adminLogin, $targetLogin);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -157,6 +113,50 @@ class PlayerActions {
|
|||||||
$this->maniaControl->log($chatMessage, true);
|
$this->maniaControl->log($chatMessage, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force a Player to Play
|
||||||
|
*
|
||||||
|
* @param string $adminLogin
|
||||||
|
* @param string $targetLogin
|
||||||
|
* @param bool $userIsAbleToSelect
|
||||||
|
* @param bool $displayAnnouncement
|
||||||
|
* @internal param int $type
|
||||||
|
*/
|
||||||
|
public function forcePlayerToPlay($adminLogin, $targetLogin, $userIsAbleToSelect = true, $displayAnnouncement = true) {
|
||||||
|
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_FORCE_PLAYER_PLAY)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($admin);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$target = $this->maniaControl->playerManager->getPlayer($targetLogin);
|
||||||
|
if (!$target) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->maniaControl->client->forceSpectator($target->login, self::SPECTATOR_PLAYER);
|
||||||
|
} catch (FaultException $e) {
|
||||||
|
//TODO exception 'There are too many players' appeared 28.04.2014, wait for more before add to faultexception
|
||||||
|
$this->maniaControl->chat->sendException($e, $admin->login);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($userIsAbleToSelect) {
|
||||||
|
try {
|
||||||
|
$this->maniaControl->client->forceSpectator($target->login, self::SPECTATOR_USER_SELECTABLE);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$this->maniaControl->chat->sendException($e, $admin->login);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Announce force
|
||||||
|
if ($displayAnnouncement) {
|
||||||
|
$chatMessage = '$<' . $admin->nickname . '$> forced $<' . $target->nickname . '$> to Play!';
|
||||||
|
$this->maniaControl->chat->sendInformation($chatMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Force a Player to Spectator
|
* Force a Player to Spectator
|
||||||
*
|
*
|
||||||
@ -179,7 +179,7 @@ class PlayerActions {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->forceSpectator($target->login, $spectatorState);
|
$this->maniaControl->client->forceSpectator($target->login, $spectatorState);
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
$this->maniaControl->chat->sendException($e, $admin->login);
|
$this->maniaControl->chat->sendException($e, $admin->login);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -193,7 +193,7 @@ class PlayerActions {
|
|||||||
// Free player slot
|
// Free player slot
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->spectatorReleasePlayerSlot($target->login);
|
$this->maniaControl->client->spectatorReleasePlayerSlot($target->login);
|
||||||
} catch(PlayerIsNotSpectatorException $e) {
|
} catch (PlayerIsNotSpectatorException $e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -203,7 +203,6 @@ class PlayerActions {
|
|||||||
*
|
*
|
||||||
* @param string $adminLogin
|
* @param string $adminLogin
|
||||||
* @param string $targetLogin
|
* @param string $targetLogin
|
||||||
* @param int $spectatorState
|
|
||||||
*/
|
*/
|
||||||
public function unMutePlayer($adminLogin, $targetLogin) {
|
public function unMutePlayer($adminLogin, $targetLogin) {
|
||||||
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
|
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
|
||||||
@ -218,9 +217,9 @@ class PlayerActions {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try{
|
try {
|
||||||
$this->maniaControl->client->unIgnore($targetLogin);
|
$this->maniaControl->client->unIgnore($targetLogin);
|
||||||
}catch(PlayerNotIgnoredException $e){
|
} catch (PlayerNotIgnoredException $e) {
|
||||||
$this->maniaControl->chat->sendError("Player is not ignored!");
|
$this->maniaControl->chat->sendError("Player is not ignored!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -236,7 +235,6 @@ class PlayerActions {
|
|||||||
*
|
*
|
||||||
* @param string $adminLogin
|
* @param string $adminLogin
|
||||||
* @param string $targetLogin
|
* @param string $targetLogin
|
||||||
* @param int $spectatorState
|
|
||||||
*/
|
*/
|
||||||
public function mutePlayer($adminLogin, $targetLogin) {
|
public function mutePlayer($adminLogin, $targetLogin) {
|
||||||
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
|
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
|
||||||
@ -251,9 +249,9 @@ class PlayerActions {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try{
|
try {
|
||||||
$this->maniaControl->client->ignore($targetLogin);
|
$this->maniaControl->client->ignore($targetLogin);
|
||||||
}catch(PlayerAlreadyIgnoredException $e){
|
} catch (PlayerAlreadyIgnoredException $e) {
|
||||||
$this->maniaControl->chat->sendError("Player already ignored!");
|
$this->maniaControl->chat->sendError("Player already ignored!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -324,7 +322,7 @@ class PlayerActions {
|
|||||||
$label->setTextColor('f00');
|
$label->setTextColor('f00');
|
||||||
|
|
||||||
$y = $height / 2 - 15;
|
$y = $height / 2 - 15;
|
||||||
foreach($message as $line) {
|
foreach ($message as $line) {
|
||||||
// Message lines
|
// Message lines
|
||||||
$label = new Label_Text();
|
$label = new Label_Text();
|
||||||
$frame->add($label);
|
$frame->add($label);
|
||||||
@ -370,7 +368,7 @@ class PlayerActions {
|
|||||||
} else {
|
} else {
|
||||||
$this->maniaControl->client->kick($target->login, $message);
|
$this->maniaControl->client->kick($target->login, $message);
|
||||||
}
|
}
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
$this->maniaControl->chat->sendException($e, $admin->login);
|
$this->maniaControl->chat->sendException($e, $admin->login);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -497,7 +495,7 @@ class PlayerActions {
|
|||||||
*/
|
*/
|
||||||
public function isPlayerMuted($login) {
|
public function isPlayerMuted($login) {
|
||||||
$ignoreList = $this->maniaControl->client->getIgnoreList(100, 0);
|
$ignoreList = $this->maniaControl->client->getIgnoreList(100, 0);
|
||||||
foreach($ignoreList as $ignoredPlayers) {
|
foreach ($ignoreList as $ignoredPlayers) {
|
||||||
if ($ignoredPlayers->login == $login) {
|
if ($ignoredPlayers->login == $login) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -15,8 +15,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
|||||||
/**
|
/**
|
||||||
* Class offering various Admin Commands related to Players
|
* Class offering various Admin Commands related to Players
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PlayerCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
|
class PlayerCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
|
||||||
@ -103,7 +103,7 @@ class PlayerCommands implements CommandListener, ManialinkPageAnswerListener, Ca
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->autoTeamBalance();
|
$this->maniaControl->client->autoTeamBalance();
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice("PlayerCommands Debug Line 112: " . $e->getMessage());
|
$this->maniaControl->errorHandler->triggerDebugNotice("PlayerCommands Debug Line 112: " . $e->getMessage());
|
||||||
// TODO: only catch 'not in team mode' exception - throw others (like connection error)
|
// TODO: only catch 'not in team mode' exception - throw others (like connection error)
|
||||||
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
||||||
@ -167,8 +167,8 @@ class PlayerCommands implements CommandListener, ManialinkPageAnswerListener, Ca
|
|||||||
* @param array $chatCallback
|
* @param array $chatCallback
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
*/
|
*/
|
||||||
public function command_Warn(array $chat, Player $player) {
|
public function command_Warn(array $chatCallback, Player $player) {
|
||||||
$params = explode(' ', $chat[1][2], 3);
|
$params = explode(' ', $chatCallback[1][2], 3);
|
||||||
if (count($params) <= 1) {
|
if (count($params) <= 1) {
|
||||||
$this->maniaControl->chat->sendUsageInfo("No Login given! Example: '//kick login'", $player->login);
|
$this->maniaControl->chat->sendUsageInfo("No Login given! Example: '//kick login'", $player->login);
|
||||||
return;
|
return;
|
||||||
|
@ -8,8 +8,8 @@ use ManiaControl\ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Player Data Manager
|
* Player Data Manager
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PlayerDataManager {
|
class PlayerDataManager {
|
||||||
@ -42,200 +42,6 @@ class PlayerDataManager {
|
|||||||
$this->storeMetaData();
|
$this->storeMetaData();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroys the stored PlayerData (Method get called by PlayerManager, so don't call it anywhere else)
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function destroyPlayerData(Player $player) {
|
|
||||||
unset($this->storedData[$player->index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines the Player-Data MetaData
|
|
||||||
*
|
|
||||||
* @param $object
|
|
||||||
* @param $dataName
|
|
||||||
* @param $default
|
|
||||||
* @param $dataDescription (optional)
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function defineMetaData($object, $dataName, $default, $dataDescription = '') {
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
$className = $this->getClassName($object);
|
|
||||||
|
|
||||||
$query = "INSERT INTO `" . self::TABLE_PLAYERDATAMETADATA . "` (
|
|
||||||
`class`,
|
|
||||||
`dataName`,
|
|
||||||
`type`,
|
|
||||||
`defaultValue`,
|
|
||||||
`description`
|
|
||||||
) VALUES (
|
|
||||||
?, ?, ?, ?, ?
|
|
||||||
) ON DUPLICATE KEY UPDATE
|
|
||||||
`type` = VALUES(`type`),
|
|
||||||
`defaultValue` = VALUES(`defaultValue`),
|
|
||||||
`description` = VALUES(`description`);";
|
|
||||||
$statement = $mysqli->prepare($query);
|
|
||||||
if ($mysqli->error) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$type = $this->getType($default);
|
|
||||||
|
|
||||||
$statement->bind_param('sssss', $className, $dataName, $type, $default, $dataDescription);
|
|
||||||
$statement->execute();
|
|
||||||
if ($statement->error) {
|
|
||||||
trigger_error($statement->error);
|
|
||||||
$statement->close();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$statement->close();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store Meta Data from the Database in the Ram
|
|
||||||
*/
|
|
||||||
private function storeMetaData() {
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
|
|
||||||
$query = "SELECT * FROM `" . self::TABLE_PLAYERDATAMETADATA . "`;";
|
|
||||||
$result = $mysqli->query($query);
|
|
||||||
if (!$result) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while($row = $result->fetch_object()) {
|
|
||||||
$this->metaData[$row->class . $row->dataName] = $row;
|
|
||||||
}
|
|
||||||
$result->close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the Player Data
|
|
||||||
*
|
|
||||||
* @param $object
|
|
||||||
* @param $dataName
|
|
||||||
* @param Player $player
|
|
||||||
* @param $serverIndex
|
|
||||||
* @return mixed|null
|
|
||||||
*/
|
|
||||||
public function getPlayerData($object, $statName, Player $player, $serverIndex = -1) {
|
|
||||||
$className = $this->getClassName($object);
|
|
||||||
|
|
||||||
$meta = $this->metaData[$className . $statName];
|
|
||||||
|
|
||||||
//Check if data is already in the ram
|
|
||||||
if (isset($this->storedData[$player->index])) {
|
|
||||||
if (isset($this->storedData[$player->index][$meta->dataId])) {
|
|
||||||
return $this->storedData[$player->index][$meta->dataId];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
$dataQuery = "SELECT `value` FROM `" . self::TABLE_PLAYERDATA . "`
|
|
||||||
WHERE `dataId` = ?
|
|
||||||
AND `playerId` = ?
|
|
||||||
AND `serverIndex` = ?;";
|
|
||||||
$dataStatement = $mysqli->prepare($dataQuery);
|
|
||||||
if ($mysqli->error) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
$dataStatement->bind_param('iii', $meta->dataId, $player->index, $serverIndex);
|
|
||||||
$dataStatement->execute();
|
|
||||||
if ($dataStatement->error) {
|
|
||||||
trigger_error($dataStatement->error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
$dataStatement->store_result();
|
|
||||||
if ($dataStatement->num_rows <= 0) {
|
|
||||||
$this->setPlayerData($object, $statName, $player, $meta->defaultValue, $serverIndex);
|
|
||||||
return $meta->default;
|
|
||||||
}
|
|
||||||
$dataStatement->bind_result($value);
|
|
||||||
$dataStatement->fetch();
|
|
||||||
$dataStatement->free_result();
|
|
||||||
$dataStatement->close();
|
|
||||||
$data = $this->castSetting($meta->type, $value);
|
|
||||||
|
|
||||||
//Store setting in the ram
|
|
||||||
if (!isset($this->storedData[$player->index])) {
|
|
||||||
$this->storedData[$player->index] = array();
|
|
||||||
}
|
|
||||||
$this->storedData[$player->index][$meta->dataId] = $data;
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set a PlayerData to a specific defined statMetaData
|
|
||||||
*
|
|
||||||
* @param $object
|
|
||||||
* @param $statName
|
|
||||||
* @param Player $player
|
|
||||||
* @param $value
|
|
||||||
* @param $serverIndex (let it empty if its global)
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function setPlayerData($object, $dataName, Player $player, $value, $serverIndex = -1) {
|
|
||||||
$className = $this->getClassName($object);
|
|
||||||
if (!$player) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$dataId = $this->getMetaDataId($className, $dataName);
|
|
||||||
if (!$dataId) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
$query = "INSERT INTO `" . self::TABLE_PLAYERDATA . "` (
|
|
||||||
`serverIndex`,
|
|
||||||
`playerId`,
|
|
||||||
`dataId`,
|
|
||||||
`value`
|
|
||||||
) VALUES (
|
|
||||||
?, ?, ?, ?
|
|
||||||
) ON DUPLICATE KEY UPDATE
|
|
||||||
`value` = VALUES(`value`);";
|
|
||||||
$statement = $mysqli->prepare($query);
|
|
||||||
if ($mysqli->error) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$statement->bind_param('iiis', $serverIndex, $player->index, $dataId, $value);
|
|
||||||
$statement->execute();
|
|
||||||
if ($statement->error) {
|
|
||||||
trigger_error($statement->error);
|
|
||||||
$statement->close();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$statement->close();
|
|
||||||
|
|
||||||
//FIXME store changed value
|
|
||||||
if (isset($this->storedData[$player->index]) && isset($this->storedData[$player->index][$dataId])) {
|
|
||||||
unset($this->storedData[$player->index][$dataId]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the Id of the MetaData
|
|
||||||
*
|
|
||||||
* @param $statName
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
private function getMetaDataId($className, $statName) {
|
|
||||||
if (isset($this->metaData[$className . $statName])) {
|
|
||||||
$stat = $this->metaData[$className . $statName];
|
|
||||||
return (int)$stat->dataId;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize necessary database tables
|
* Initialize necessary database tables
|
||||||
*
|
*
|
||||||
@ -291,6 +97,94 @@ class PlayerDataManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store Meta Data from the Database in the Ram
|
||||||
|
*/
|
||||||
|
private function storeMetaData() {
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
|
||||||
|
$query = "SELECT * FROM `" . self::TABLE_PLAYERDATAMETADATA . "`;";
|
||||||
|
$result = $mysqli->query($query);
|
||||||
|
if (!$result) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ($row = $result->fetch_object()) {
|
||||||
|
$this->metaData[$row->class . $row->dataName] = $row;
|
||||||
|
}
|
||||||
|
$result->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys the stored PlayerData (Method get called by PlayerManager, so don't call it anywhere else)
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function destroyPlayerData(Player $player) {
|
||||||
|
unset($this->storedData[$player->index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the Player-Data MetaData
|
||||||
|
*
|
||||||
|
* @param $object
|
||||||
|
* @param $dataName
|
||||||
|
* @param $default
|
||||||
|
* @param $dataDescription (optional)
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function defineMetaData($object, $dataName, $default, $dataDescription = '') {
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
$className = $this->getClassName($object);
|
||||||
|
|
||||||
|
$query = "INSERT INTO `" . self::TABLE_PLAYERDATAMETADATA . "` (
|
||||||
|
`class`,
|
||||||
|
`dataName`,
|
||||||
|
`type`,
|
||||||
|
`defaultValue`,
|
||||||
|
`description`
|
||||||
|
) VALUES (
|
||||||
|
?, ?, ?, ?, ?
|
||||||
|
) ON DUPLICATE KEY UPDATE
|
||||||
|
`type` = VALUES(`type`),
|
||||||
|
`defaultValue` = VALUES(`defaultValue`),
|
||||||
|
`description` = VALUES(`description`);";
|
||||||
|
$statement = $mysqli->prepare($query);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$type = $this->getType($default);
|
||||||
|
|
||||||
|
$statement->bind_param('sssss', $className, $dataName, $type, $default, $dataDescription);
|
||||||
|
$statement->execute();
|
||||||
|
if ($statement->error) {
|
||||||
|
trigger_error($statement->error);
|
||||||
|
$statement->close();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$statement->close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Class Name of a Parameter
|
||||||
|
*
|
||||||
|
* @param mixed $param
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getClassName($param) {
|
||||||
|
if (is_object($param)) {
|
||||||
|
return get_class($param);
|
||||||
|
}
|
||||||
|
if (is_string($param)) {
|
||||||
|
return $param;
|
||||||
|
}
|
||||||
|
trigger_error('Invalid class param. ' . $param);
|
||||||
|
return (string)$param;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Type of a Parameter
|
* Get Type of a Parameter
|
||||||
*
|
*
|
||||||
@ -317,6 +211,130 @@ class PlayerDataManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Player Data
|
||||||
|
*
|
||||||
|
* @param mixed $object
|
||||||
|
* @param string $dataName
|
||||||
|
* @param Player $player
|
||||||
|
* @param int $serverIndex
|
||||||
|
* @return mixed|null
|
||||||
|
*/
|
||||||
|
public function getPlayerData($object, $dataName, Player $player, $serverIndex = -1) {
|
||||||
|
$className = $this->getClassName($object);
|
||||||
|
|
||||||
|
$meta = $this->metaData[$className . $dataName];
|
||||||
|
|
||||||
|
//Check if data is already in the ram
|
||||||
|
if (isset($this->storedData[$player->index])) {
|
||||||
|
if (isset($this->storedData[$player->index][$meta->dataId])) {
|
||||||
|
return $this->storedData[$player->index][$meta->dataId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
$dataQuery = "SELECT `value` FROM `" . self::TABLE_PLAYERDATA . "`
|
||||||
|
WHERE `dataId` = ?
|
||||||
|
AND `playerId` = ?
|
||||||
|
AND `serverIndex` = ?;";
|
||||||
|
$dataStatement = $mysqli->prepare($dataQuery);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$dataStatement->bind_param('iii', $meta->dataId, $player->index, $serverIndex);
|
||||||
|
$dataStatement->execute();
|
||||||
|
if ($dataStatement->error) {
|
||||||
|
trigger_error($dataStatement->error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$dataStatement->store_result();
|
||||||
|
if ($dataStatement->num_rows <= 0) {
|
||||||
|
$this->setPlayerData($object, $dataName, $player, $meta->defaultValue, $serverIndex);
|
||||||
|
return $meta->default;
|
||||||
|
}
|
||||||
|
$dataStatement->bind_result($value);
|
||||||
|
$dataStatement->fetch();
|
||||||
|
$dataStatement->free_result();
|
||||||
|
$dataStatement->close();
|
||||||
|
$data = $this->castSetting($meta->type, $value);
|
||||||
|
|
||||||
|
//Store setting in the ram
|
||||||
|
if (!isset($this->storedData[$player->index])) {
|
||||||
|
$this->storedData[$player->index] = array();
|
||||||
|
}
|
||||||
|
$this->storedData[$player->index][$meta->dataId] = $data;
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a PlayerData to a specific defined statMetaData
|
||||||
|
*
|
||||||
|
* @param mixed $object
|
||||||
|
* @param string $dataName
|
||||||
|
* @param Player $player
|
||||||
|
* @param mixed $value
|
||||||
|
* @param int $serverIndex (let it empty if its global)
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function setPlayerData($object, $dataName, Player $player, $value, $serverIndex = -1) {
|
||||||
|
$className = $this->getClassName($object);
|
||||||
|
if (!$player) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$dataId = $this->getMetaDataId($className, $dataName);
|
||||||
|
if (!$dataId) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
$query = "INSERT INTO `" . self::TABLE_PLAYERDATA . "` (
|
||||||
|
`serverIndex`,
|
||||||
|
`playerId`,
|
||||||
|
`dataId`,
|
||||||
|
`value`
|
||||||
|
) VALUES (
|
||||||
|
?, ?, ?, ?
|
||||||
|
) ON DUPLICATE KEY UPDATE
|
||||||
|
`value` = VALUES(`value`);";
|
||||||
|
$statement = $mysqli->prepare($query);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$statement->bind_param('iiis', $serverIndex, $player->index, $dataId, $value);
|
||||||
|
$statement->execute();
|
||||||
|
if ($statement->error) {
|
||||||
|
trigger_error($statement->error);
|
||||||
|
$statement->close();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$statement->close();
|
||||||
|
|
||||||
|
//FIXME store changed value
|
||||||
|
if (isset($this->storedData[$player->index]) && isset($this->storedData[$player->index][$dataId])) {
|
||||||
|
unset($this->storedData[$player->index][$dataId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the Id of the MetaData
|
||||||
|
*
|
||||||
|
* @param string $className
|
||||||
|
* @param string $statName
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
private function getMetaDataId($className, $statName) {
|
||||||
|
if (isset($this->metaData[$className . $statName])) {
|
||||||
|
$stat = $this->metaData[$className . $statName];
|
||||||
|
return (int)$stat->dataId;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cast a Setting to the given Type
|
* Cast a Setting to the given Type
|
||||||
*
|
*
|
||||||
@ -343,21 +361,4 @@ class PlayerDataManager {
|
|||||||
trigger_error('Unsupported setting type. ' . print_r($type, true));
|
trigger_error('Unsupported setting type. ' . print_r($type, true));
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Class Name of a Parameter
|
|
||||||
*
|
|
||||||
* @param mixed $param
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private function getClassName($param) {
|
|
||||||
if (is_object($param)) {
|
|
||||||
return get_class($param);
|
|
||||||
}
|
|
||||||
if (is_string($param)) {
|
|
||||||
return $param;
|
|
||||||
}
|
|
||||||
trigger_error('Invalid class param. ' . $param);
|
|
||||||
return (string)$param;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -14,12 +14,13 @@ use ManiaControl\Formatter;
|
|||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
use ManiaControl\Manialinks\ManialinkManager;
|
use ManiaControl\Manialinks\ManialinkManager;
|
||||||
use ManiaControl\Statistics\StatisticManager;
|
use ManiaControl\Statistics\StatisticManager;
|
||||||
|
use Maniaplanet\DedicatedServer\Structures\Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Player Detailed Page
|
* Player Detailed Page
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PlayerDetailed {
|
class PlayerDetailed {
|
||||||
@ -48,8 +49,14 @@ class PlayerDetailed {
|
|||||||
$this->quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowSubStyle();
|
$this->quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowSubStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a Frame with detailed Information about the Target Player
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @param string $targetLogin
|
||||||
|
*/
|
||||||
public function showPlayerDetailed(Player $player, $targetLogin) {
|
public function showPlayerDetailed(Player $player, $targetLogin) {
|
||||||
|
/** @var Player $target */
|
||||||
$target = $this->maniaControl->playerManager->getPlayer($targetLogin);
|
$target = $this->maniaControl->playerManager->getPlayer($targetLogin);
|
||||||
|
|
||||||
//Create ManiaLink
|
//Create ManiaLink
|
||||||
@ -209,7 +216,13 @@ class PlayerDetailed {
|
|||||||
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'PlayerDetailed');
|
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'PlayerDetailed');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function statisticsFrame($player) {
|
/**
|
||||||
|
* Build a Frame with Statistics about the given Player
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @return Frame
|
||||||
|
*/
|
||||||
|
public function statisticsFrame(Player $player) {
|
||||||
$frame = new Frame();
|
$frame = new Frame();
|
||||||
|
|
||||||
$playerStats = $this->maniaControl->statisticManager->getAllPlayerStats($player);
|
$playerStats = $this->maniaControl->statisticManager->getAllPlayerStats($player);
|
||||||
@ -217,7 +230,7 @@ class PlayerDetailed {
|
|||||||
$x = -$this->width / 2 + 52;
|
$x = -$this->width / 2 + 52;
|
||||||
$id = 1;
|
$id = 1;
|
||||||
|
|
||||||
foreach($playerStats as $stat) {
|
foreach ($playerStats as $stat) {
|
||||||
$statProperties = $stat[0];
|
$statProperties = $stat[0];
|
||||||
$value = $stat[1];
|
$value = $stat[1];
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace ManiaControl\Players;
|
namespace ManiaControl\Players;
|
||||||
|
|
||||||
use MCTeam\CustomVotesPlugin;
|
|
||||||
use FML\Controls\Control;
|
use FML\Controls\Control;
|
||||||
use FML\Controls\Frame;
|
use FML\Controls\Frame;
|
||||||
use FML\Controls\Labels\Label_Button;
|
use FML\Controls\Labels\Label_Button;
|
||||||
@ -23,14 +22,16 @@ use ManiaControl\Formatter;
|
|||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
use ManiaControl\Manialinks\ManialinkManager;
|
use ManiaControl\Manialinks\ManialinkManager;
|
||||||
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
|
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
|
||||||
|
use Maniaplanet\DedicatedServer\Structures\Player;
|
||||||
use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
|
use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
|
||||||
use Maniaplanet\DedicatedServer\Xmlrpc\PlayerIsNotSpectatorException;
|
use Maniaplanet\DedicatedServer\Xmlrpc\PlayerIsNotSpectatorException;
|
||||||
|
use MCTeam\CustomVotesPlugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PlayerList Widget Class
|
* PlayerList Widget Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PlayerList implements ManialinkPageAnswerListener, CallbackListener, TimerListener {
|
class PlayerList implements ManialinkPageAnswerListener, CallbackListener, TimerListener {
|
||||||
@ -96,6 +97,39 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$this->playersListShown[$player->login] = $showStatus;
|
$this->playersListShown[$player->login] = $showStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unset the player if he opened another Main Widget
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
* @param $openedWidget
|
||||||
|
*/
|
||||||
|
public function handleWidgetOpened(Player $player, $openedWidget) {
|
||||||
|
//unset when another main widget got opened
|
||||||
|
if ($openedWidget != 'PlayerList') {
|
||||||
|
unset($this->playersListShown[$player->login]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the widget
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function closeWidget(Player $player) {
|
||||||
|
unset($this->playersListShown[$player->login]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the player advanced widget widget
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function closePlayerAdvancedWidget(array $callback, Player $player) {
|
||||||
|
$this->playersListShown[$player->login] = self::SHOWN_MAIN_WINDOW;
|
||||||
|
$this->showPlayerList($player); // overwrite the manialink
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show the PlayerList Widget to the Player
|
* Show the PlayerList Widget to the Player
|
||||||
*
|
*
|
||||||
@ -144,7 +178,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$i = 1;
|
$i = 1;
|
||||||
$y = $height / 2 - 10;
|
$y = $height / 2 - 10;
|
||||||
$pageFrames = array();
|
$pageFrames = array();
|
||||||
foreach($players as $listPlayer) {
|
foreach ($players as $listPlayer) {
|
||||||
/** @var Player $listPlayer * */
|
/** @var Player $listPlayer * */
|
||||||
if (!isset($pageFrame)) {
|
if (!isset($pageFrame)) {
|
||||||
$pageFrame = new Frame();
|
$pageFrame = new Frame();
|
||||||
@ -193,7 +227,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$teamQuad->setZ(0.1);
|
$teamQuad->setZ(0.1);
|
||||||
$teamQuad->setSize(3.8, 3.8);
|
$teamQuad->setSize(3.8, 3.8);
|
||||||
|
|
||||||
switch($listPlayer->teamId) {
|
switch ($listPlayer->teamId) {
|
||||||
case 0:
|
case 0:
|
||||||
$teamQuad->setSubStyle($teamQuad::SUBSTYLE_1);
|
$teamQuad->setSubStyle($teamQuad::SUBSTYLE_1);
|
||||||
break;
|
break;
|
||||||
@ -251,7 +285,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$playerQuad->setSubStyle($playerQuad::SUBSTYLE_TrackInfo);
|
$playerQuad->setSubStyle($playerQuad::SUBSTYLE_TrackInfo);
|
||||||
$playerQuad->setSize(2.7, 2.7);
|
$playerQuad->setSize(2.7, 2.7);
|
||||||
$playerQuad->setAction(self::ACTION_OPEN_PLAYER_DETAILED . "." . $listPlayer->login);
|
$playerQuad->setAction(self::ACTION_OPEN_PLAYER_DETAILED . "." . $listPlayer->login);
|
||||||
$description = 'View Statistics of $<'.$listPlayer->nickname. '$>';
|
$description = 'View Statistics of $<' . $listPlayer->nickname . '$>';
|
||||||
$playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
|
$playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
|
||||||
|
|
||||||
// Camera Quad
|
// Camera Quad
|
||||||
@ -261,7 +295,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$playerQuad->setZ(3);
|
$playerQuad->setZ(3);
|
||||||
$playerQuad->setSubStyle($playerQuad::SUBSTYLE_Camera);
|
$playerQuad->setSubStyle($playerQuad::SUBSTYLE_Camera);
|
||||||
$playerQuad->setSize(3.8, 3.8);
|
$playerQuad->setSize(3.8, 3.8);
|
||||||
$description = 'Spectate $<'.$listPlayer->nickname.'$>';
|
$description = 'Spectate $<' . $listPlayer->nickname . '$>';
|
||||||
$playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
|
$playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
|
||||||
$playerQuad->setAction(self::ACTION_SPECTATE_PLAYER . "." . $listPlayer->login);
|
$playerQuad->setAction(self::ACTION_SPECTATE_PLAYER . "." . $listPlayer->login);
|
||||||
|
|
||||||
@ -275,7 +309,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$playerQuad->addPlayerProfileFeature($listPlayer->login);
|
$playerQuad->addPlayerProfileFeature($listPlayer->login);
|
||||||
|
|
||||||
// Description Label
|
// Description Label
|
||||||
$description = 'View Player Profile of $<' . $listPlayer->nickname.'$>';
|
$description = 'View Player Profile of $<' . $listPlayer->nickname . '$>';
|
||||||
$playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
|
$playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
|
||||||
|
|
||||||
if ($this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) {
|
if ($this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) {
|
||||||
@ -289,7 +323,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$playerQuad->setAction(self::ACTION_PLAYER_ADV . "." . $listPlayer->login);
|
$playerQuad->setAction(self::ACTION_PLAYER_ADV . "." . $listPlayer->login);
|
||||||
|
|
||||||
// Description Label
|
// Description Label
|
||||||
$description = 'Advanced Player Actions for $<' . $listPlayer->nickname.'$>';
|
$description = 'Advanced Player Actions for $<' . $listPlayer->nickname . '$>';
|
||||||
$playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
|
$playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -395,27 +429,14 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'PlayerList');
|
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'PlayerList');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays the Advanced Player Window
|
|
||||||
*
|
|
||||||
* @param Player $caller
|
|
||||||
* @param $login
|
|
||||||
*/
|
|
||||||
public function advancedPlayerWidget(Player $caller, $login) {
|
|
||||||
// Set status to target player login
|
|
||||||
$this->playersListShown[$caller->login] = $login;
|
|
||||||
|
|
||||||
// Reopen playerlist
|
|
||||||
$this->showPlayerList($caller);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extra window with special actions on players like warn,kick, ban, authorization levels...
|
* Extra window with special actions on players like warn,kick, ban, authorization levels...
|
||||||
*
|
*
|
||||||
* @param $login
|
* @param Player $admin
|
||||||
|
* @param string $login
|
||||||
* @return Frame
|
* @return Frame
|
||||||
*/
|
*/
|
||||||
public function showAdvancedPlayerWidget($admin, $login) {
|
public function showAdvancedPlayerWidget(Player $admin, $login) {
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
$width = $this->maniaControl->manialinkManager->styleManager->getListWidgetsWidth();
|
$width = $this->maniaControl->manialinkManager->styleManager->getListWidgetsWidth();
|
||||||
$height = $this->maniaControl->manialinkManager->styleManager->getListWidgetsHeight();
|
$height = $this->maniaControl->manialinkManager->styleManager->getListWidgetsHeight();
|
||||||
@ -608,39 +629,6 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
return $frame;
|
return $frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Unset the player if he opened another Main Widget
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
* @param $openedWidget
|
|
||||||
*/
|
|
||||||
public function handleWidgetOpened(Player $player, $openedWidget) {
|
|
||||||
//unset when another main widget got opened
|
|
||||||
if ($openedWidget != 'PlayerList') {
|
|
||||||
unset($this->playersListShown[$player->login]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Closes the widget
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function closeWidget(Player $player) {
|
|
||||||
unset($this->playersListShown[$player->login]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Closes the player advanced widget widget
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function closePlayerAdvancedWidget(array $callback, Player $player) {
|
|
||||||
$this->playersListShown[$player->login] = self::SHOWN_MAIN_WINDOW;
|
|
||||||
$this->showPlayerList($player); // overwrite the manialink
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called on ManialinkPageAnswer
|
* Called on ManialinkPageAnswer
|
||||||
*
|
*
|
||||||
@ -657,12 +645,12 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$adminLogin = $callback[1][1];
|
$adminLogin = $callback[1][1];
|
||||||
$targetLogin = $actionArray[2];
|
$targetLogin = $actionArray[2];
|
||||||
|
|
||||||
switch($action) {
|
switch ($action) {
|
||||||
case self::ACTION_SPECTATE_PLAYER:
|
case self::ACTION_SPECTATE_PLAYER:
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->forceSpectator($adminLogin, PlayerActions::SPECTATOR_BUT_KEEP_SELECTABLE);
|
$this->maniaControl->client->forceSpectator($adminLogin, PlayerActions::SPECTATOR_BUT_KEEP_SELECTABLE);
|
||||||
$this->maniaControl->client->forceSpectatorTarget($adminLogin, $targetLogin, 1);
|
$this->maniaControl->client->forceSpectatorTarget($adminLogin, $targetLogin, 1);
|
||||||
} catch(PlayerIsNotSpectatorException $e) {
|
} catch (PlayerIsNotSpectatorException $e) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case self::ACTION_OPEN_PLAYER_DETAILED:
|
case self::ACTION_OPEN_PLAYER_DETAILED:
|
||||||
@ -734,7 +722,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
try {
|
try {
|
||||||
$self->maniaControl->client->forceSpectator($target->login, PlayerActions::SPECTATOR_BUT_KEEP_SELECTABLE);
|
$self->maniaControl->client->forceSpectator($target->login, PlayerActions::SPECTATOR_BUT_KEEP_SELECTABLE);
|
||||||
$self->maniaControl->client->spectatorReleasePlayerSlot($target->login);
|
$self->maniaControl->client->spectatorReleasePlayerSlot($target->login);
|
||||||
} catch(PlayerIsNotSpectatorException $e) {
|
} catch (PlayerIsNotSpectatorException $e) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -758,20 +746,34 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
|
|||||||
$message = '$39F You got kicked due a Public vote!$z ';
|
$message = '$39F You got kicked due a Public vote!$z ';
|
||||||
try {
|
try {
|
||||||
$self->maniaControl->client->kick($target->login, $message);
|
$self->maniaControl->client->kick($target->login, $message);
|
||||||
} catch(LoginUnknownException $e) {
|
} catch (LoginUnknownException $e) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays the Advanced Player Window
|
||||||
|
*
|
||||||
|
* @param Player $caller
|
||||||
|
* @param $login
|
||||||
|
*/
|
||||||
|
public function advancedPlayerWidget(Player $caller, $login) {
|
||||||
|
// Set status to target player login
|
||||||
|
$this->playersListShown[$caller->login] = $login;
|
||||||
|
|
||||||
|
// Reopen playerlist
|
||||||
|
$this->showPlayerList($caller);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reopen the widget on PlayerInfoChanged / Player Connect and Disconnect
|
* Reopen the widget on PlayerInfoChanged / Player Connect and Disconnect
|
||||||
*
|
*
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
*/
|
*/
|
||||||
public function updateWidget(Player $player) {
|
public function updateWidget(Player $player) {
|
||||||
foreach($this->playersListShown as $login => $shown) {
|
foreach ($this->playersListShown as $login => $shown) {
|
||||||
if (!$shown) {
|
if (!$shown) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
|
|||||||
/**
|
/**
|
||||||
* Class managing Players
|
* Class managing Players
|
||||||
*
|
*
|
||||||
* @author kremsy & steeffeen
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PlayerManager implements CallbackListener, TimerListener {
|
class PlayerManager implements CallbackListener, TimerListener {
|
||||||
@ -112,7 +112,7 @@ class PlayerManager implements CallbackListener, TimerListener {
|
|||||||
public function onInit() {
|
public function onInit() {
|
||||||
// Add all players
|
// Add all players
|
||||||
$players = $this->maniaControl->client->getPlayerList(300, 0, 2);
|
$players = $this->maniaControl->client->getPlayerList(300, 0, 2);
|
||||||
foreach($players as $playerItem) {
|
foreach ($players as $playerItem) {
|
||||||
if ($playerItem->playerId <= 0) {
|
if ($playerItem->playerId <= 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -141,183 +141,6 @@ class PlayerManager implements CallbackListener, TimerListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle playerConnect callback
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function playerConnect(array $callback) {
|
|
||||||
$login = $callback[1][0];
|
|
||||||
try {
|
|
||||||
$playerInfo = $this->maniaControl->client->getDetailedPlayerInfo($login);
|
|
||||||
$player = new Player($playerInfo);
|
|
||||||
|
|
||||||
$this->addPlayer($player);
|
|
||||||
} catch(LoginUnknownException $e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle playerDisconnect callback
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function playerDisconnect(array $callback) {
|
|
||||||
$login = $callback[1][0];
|
|
||||||
$player = $this->removePlayer($login);
|
|
||||||
if (!$player) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Trigger own callback
|
|
||||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERDISCONNECT, $player);
|
|
||||||
|
|
||||||
if ($player->isFakePlayer()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$played = Formatter::formatTimeH(time() - $player->joinTime);
|
|
||||||
$logMessage = "Player left: {$player->login} / {$player->nickname} Playtime: {$played}";
|
|
||||||
$this->maniaControl->log(Formatter::stripCodes($logMessage));
|
|
||||||
|
|
||||||
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES)) {
|
|
||||||
$this->maniaControl->chat->sendChat('$0f0$<$fff' . $player->nickname . '$> has left the game');
|
|
||||||
}
|
|
||||||
|
|
||||||
//Destroys stored PlayerData, after all Disconnect Callbacks got Handled
|
|
||||||
$this->playerDataManager->destroyPlayerData($player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update PlayerInfo
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function playerInfoChanged(array $callback) {
|
|
||||||
$player = $this->getPlayer($callback[1][0]['Login']);
|
|
||||||
if (!$player) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$player->ladderRank = $callback[1][0]["LadderRanking"];
|
|
||||||
$player->teamId = $callback[1][0]["TeamId"];
|
|
||||||
|
|
||||||
//Check if the Player is in a Team, to notify if its a TeamMode or not
|
|
||||||
if ($player->teamId != -1) {
|
|
||||||
$this->maniaControl->server->setTeamMode(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
$prevJoinState = $player->hasJoinedGame;
|
|
||||||
|
|
||||||
$player->updatePlayerFlags($callback[1][0]["Flags"]);
|
|
||||||
$player->updateSpectatorStatus($callback[1][0]["SpectatorStatus"]);
|
|
||||||
|
|
||||||
//Check if Player finished joining the game
|
|
||||||
if ($player->hasJoinedGame && !$prevJoinState) {
|
|
||||||
|
|
||||||
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES) && !$player->isFakePlayer()) {
|
|
||||||
$string = array(0 => '$0f0Player', 1 => '$0f0Moderator', 2 => '$0f0Admin', 3 => '$0f0SuperAdmin', 4 => '$0f0MasterAdmin');
|
|
||||||
$chatMessage = '$0f0' . $string[$player->authLevel] . ' $<$fff' . $player->nickname . '$> Nation: $<$fff' . $player->getCountry() . '$> joined!';
|
|
||||||
$this->maniaControl->chat->sendChat($chatMessage);
|
|
||||||
$this->maniaControl->chat->sendInformation('This server uses ManiaControl v' . ManiaControl::VERSION . '!', $player->login);
|
|
||||||
}
|
|
||||||
|
|
||||||
$logMessage = "Player joined: {$player->login} / " . Formatter::stripCodes($player->nickname) . " Nation: " . $player->getCountry() . " IP: {$player->ipAddress}";
|
|
||||||
$this->maniaControl->log($logMessage);
|
|
||||||
|
|
||||||
// Increment the Player Join Count
|
|
||||||
$this->maniaControl->statisticManager->incrementStat(self::STAT_JOIN_COUNT, $player, $this->maniaControl->server->index);
|
|
||||||
|
|
||||||
// Trigger own PlayerJoined callback
|
|
||||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERCONNECT, $player);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Trigger own callback
|
|
||||||
$this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERINFOCHANGED, $player);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all Players
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getPlayers() {
|
|
||||||
return $this->players;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the Count of all Player
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getPlayerCount() {
|
|
||||||
$count = 0;
|
|
||||||
foreach($this->players as $player) {
|
|
||||||
/** @var Player $player */
|
|
||||||
if (!$player->isSpectator) {
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the Count of all Spectators
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getSpectatorCount() {
|
|
||||||
$count = 0;
|
|
||||||
foreach($this->players as $player) {
|
|
||||||
/** @var Player $player */
|
|
||||||
if ($player->isSpectator) {
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a Player by his index
|
|
||||||
*
|
|
||||||
* @param $index
|
|
||||||
* @param bool $connectedPlayersOnly
|
|
||||||
* @return Player|null
|
|
||||||
*/
|
|
||||||
public function getPlayerByIndex($index, $connectedPlayersOnly = false) {
|
|
||||||
foreach($this->players as $player) {
|
|
||||||
/** @var Player $player */
|
|
||||||
if ($player->index == $index) {
|
|
||||||
return $player;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($connectedPlayersOnly) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
//Player is not online -> get Player from Database
|
|
||||||
return $this->getPlayerFromDatabaseByIndex($index);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a Player by Login
|
|
||||||
*
|
|
||||||
* @param string $login
|
|
||||||
* @param bool $connectedPlayersOnly
|
|
||||||
* @return Player|null
|
|
||||||
*/
|
|
||||||
public function getPlayer($login, $connectedPlayersOnly = false) {
|
|
||||||
if (!isset($this->players[$login])) {
|
|
||||||
if ($connectedPlayersOnly) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return $this->getPlayerFromDatabaseByLogin($login);
|
|
||||||
}
|
|
||||||
return $this->players[$login];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a player
|
* Add a player
|
||||||
*
|
*
|
||||||
@ -330,99 +153,6 @@ class PlayerManager implements CallbackListener, TimerListener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove a Player
|
|
||||||
*
|
|
||||||
* @param string $login
|
|
||||||
* @param bool $savePlayedTime
|
|
||||||
* @return Player $player
|
|
||||||
*/
|
|
||||||
private function removePlayer($login, $savePlayedTime = true) {
|
|
||||||
if (!isset($this->players[$login])) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
$player = $this->players[$login];
|
|
||||||
unset($this->players[$login]);
|
|
||||||
if ($savePlayedTime) {
|
|
||||||
$this->updatePlayedTime($player);
|
|
||||||
}
|
|
||||||
return $player;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get's a Player out of the database
|
|
||||||
*
|
|
||||||
* @param $playerIndex
|
|
||||||
* @return Player $player
|
|
||||||
*/
|
|
||||||
private function getPlayerFromDatabaseByIndex($playerIndex) {
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
|
|
||||||
if (!is_numeric($playerIndex)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$query = "SELECT * FROM `" . self::TABLE_PLAYERS . "` WHERE `index` = " . $playerIndex . ";";
|
|
||||||
$result = $mysqli->query($query);
|
|
||||||
if (!$result) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$row = $result->fetch_object();
|
|
||||||
$result->close();
|
|
||||||
|
|
||||||
if (!isset($row)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$player = new Player(null);
|
|
||||||
$player->index = $playerIndex;
|
|
||||||
$player->login = $row->login;
|
|
||||||
$player->rawNickname = $row->nickname;
|
|
||||||
$player->nickname = Formatter::stripDirtyCodes($player->rawNickname);
|
|
||||||
$player->path = $row->path;
|
|
||||||
$player->authLevel = $row->authLevel;
|
|
||||||
|
|
||||||
return $player;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get's a Player out of the database
|
|
||||||
*
|
|
||||||
* @param $playerIndex
|
|
||||||
* @return Player $player
|
|
||||||
*/
|
|
||||||
private function getPlayerFromDatabaseByLogin($playerLogin) {
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
|
|
||||||
$query = "SELECT * FROM `" . self::TABLE_PLAYERS . "` WHERE `login` LIKE '" . $mysqli->escape_string($playerLogin) . "';";
|
|
||||||
$result = $mysqli->query($query);
|
|
||||||
if (!$result) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$row = $result->fetch_object();
|
|
||||||
$result->close();
|
|
||||||
|
|
||||||
if (!isset($row)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$player = new Player(null);
|
|
||||||
$player->index = $row->index;
|
|
||||||
$player->login = $row->login;
|
|
||||||
$player->rawNickname = $row->nickname;
|
|
||||||
$player->nickname = Formatter::stripDirtyCodes($player->rawNickname);
|
|
||||||
$player->path = $row->path;
|
|
||||||
$player->authLevel = $row->authLevel;
|
|
||||||
|
|
||||||
return $player;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save player in Database and fill up Object Properties
|
* Save player in Database and fill up Object Properties
|
||||||
*
|
*
|
||||||
@ -481,6 +211,72 @@ class PlayerManager implements CallbackListener, TimerListener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle playerConnect callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function playerConnect(array $callback) {
|
||||||
|
$login = $callback[1][0];
|
||||||
|
try {
|
||||||
|
$playerInfo = $this->maniaControl->client->getDetailedPlayerInfo($login);
|
||||||
|
$player = new Player($playerInfo);
|
||||||
|
|
||||||
|
$this->addPlayer($player);
|
||||||
|
} catch (LoginUnknownException $e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle playerDisconnect callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function playerDisconnect(array $callback) {
|
||||||
|
$login = $callback[1][0];
|
||||||
|
$player = $this->removePlayer($login);
|
||||||
|
if (!$player) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trigger own callback
|
||||||
|
$this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERDISCONNECT, $player);
|
||||||
|
|
||||||
|
if ($player->isFakePlayer()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$played = Formatter::formatTimeH(time() - $player->joinTime);
|
||||||
|
$logMessage = "Player left: {$player->login} / {$player->nickname} Playtime: {$played}";
|
||||||
|
$this->maniaControl->log(Formatter::stripCodes($logMessage));
|
||||||
|
|
||||||
|
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES)) {
|
||||||
|
$this->maniaControl->chat->sendChat('$0f0$<$fff' . $player->nickname . '$> has left the game');
|
||||||
|
}
|
||||||
|
|
||||||
|
//Destroys stored PlayerData, after all Disconnect Callbacks got Handled
|
||||||
|
$this->playerDataManager->destroyPlayerData($player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a Player
|
||||||
|
*
|
||||||
|
* @param string $login
|
||||||
|
* @param bool $savePlayedTime
|
||||||
|
* @return Player $player
|
||||||
|
*/
|
||||||
|
private function removePlayer($login, $savePlayedTime = true) {
|
||||||
|
if (!isset($this->players[$login])) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$player = $this->players[$login];
|
||||||
|
unset($this->players[$login]);
|
||||||
|
if ($savePlayedTime) {
|
||||||
|
$this->updatePlayedTime($player);
|
||||||
|
}
|
||||||
|
return $player;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update total played time of the player
|
* Update total played time of the player
|
||||||
*
|
*
|
||||||
@ -495,4 +291,205 @@ class PlayerManager implements CallbackListener, TimerListener {
|
|||||||
|
|
||||||
return $this->maniaControl->statisticManager->insertStat(self::STAT_SERVERTIME, $player, $this->maniaControl->server->index, $playedTime);
|
return $this->maniaControl->statisticManager->insertStat(self::STAT_SERVERTIME, $player, $this->maniaControl->server->index, $playedTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update PlayerInfo
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function playerInfoChanged(array $callback) {
|
||||||
|
$player = $this->getPlayer($callback[1][0]['Login']);
|
||||||
|
if (!$player) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$player->ladderRank = $callback[1][0]["LadderRanking"];
|
||||||
|
$player->teamId = $callback[1][0]["TeamId"];
|
||||||
|
|
||||||
|
//Check if the Player is in a Team, to notify if its a TeamMode or not
|
||||||
|
if ($player->teamId != -1) {
|
||||||
|
$this->maniaControl->server->setTeamMode(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$prevJoinState = $player->hasJoinedGame;
|
||||||
|
|
||||||
|
$player->updatePlayerFlags($callback[1][0]["Flags"]);
|
||||||
|
$player->updateSpectatorStatus($callback[1][0]["SpectatorStatus"]);
|
||||||
|
|
||||||
|
//Check if Player finished joining the game
|
||||||
|
if ($player->hasJoinedGame && !$prevJoinState) {
|
||||||
|
|
||||||
|
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES) && !$player->isFakePlayer()) {
|
||||||
|
$string = array(0 => '$0f0Player', 1 => '$0f0Moderator', 2 => '$0f0Admin', 3 => '$0f0SuperAdmin', 4 => '$0f0MasterAdmin');
|
||||||
|
$chatMessage = '$0f0' . $string[$player->authLevel] . ' $<$fff' . $player->nickname . '$> Nation: $<$fff' . $player->getCountry() . '$> joined!';
|
||||||
|
$this->maniaControl->chat->sendChat($chatMessage);
|
||||||
|
$this->maniaControl->chat->sendInformation('This server uses ManiaControl v' . ManiaControl::VERSION . '!', $player->login);
|
||||||
|
}
|
||||||
|
|
||||||
|
$logMessage = "Player joined: {$player->login} / " . Formatter::stripCodes($player->nickname) . " Nation: " . $player->getCountry() . " IP: {$player->ipAddress}";
|
||||||
|
$this->maniaControl->log($logMessage);
|
||||||
|
|
||||||
|
// Increment the Player Join Count
|
||||||
|
$this->maniaControl->statisticManager->incrementStat(self::STAT_JOIN_COUNT, $player, $this->maniaControl->server->index);
|
||||||
|
|
||||||
|
// Trigger own PlayerJoined callback
|
||||||
|
$this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERCONNECT, $player);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trigger own callback
|
||||||
|
$this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERINFOCHANGED, $player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a Player by Login
|
||||||
|
*
|
||||||
|
* @param string $login
|
||||||
|
* @param bool $connectedPlayersOnly
|
||||||
|
* @return Player
|
||||||
|
*/
|
||||||
|
public function getPlayer($login, $connectedPlayersOnly = false) {
|
||||||
|
if (!isset($this->players[$login])) {
|
||||||
|
if ($connectedPlayersOnly) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return $this->getPlayerFromDatabaseByLogin($login);
|
||||||
|
}
|
||||||
|
return $this->players[$login];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a Player from the Database
|
||||||
|
*
|
||||||
|
* @param string $playerLogin
|
||||||
|
* @return Player
|
||||||
|
*/
|
||||||
|
private function getPlayerFromDatabaseByLogin($playerLogin) {
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
|
||||||
|
$query = "SELECT * FROM `" . self::TABLE_PLAYERS . "` WHERE `login` LIKE '" . $mysqli->escape_string($playerLogin) . "';";
|
||||||
|
$result = $mysqli->query($query);
|
||||||
|
if (!$result) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$row = $result->fetch_object();
|
||||||
|
$result->close();
|
||||||
|
|
||||||
|
if (!isset($row)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$player = new Player(null);
|
||||||
|
$player->index = $row->index;
|
||||||
|
$player->login = $row->login;
|
||||||
|
$player->rawNickname = $row->nickname;
|
||||||
|
$player->nickname = Formatter::stripDirtyCodes($player->rawNickname);
|
||||||
|
$player->path = $row->path;
|
||||||
|
$player->authLevel = $row->authLevel;
|
||||||
|
|
||||||
|
return $player;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Players
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getPlayers() {
|
||||||
|
return $this->players;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Count of all Player
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getPlayerCount() {
|
||||||
|
$count = 0;
|
||||||
|
foreach ($this->players as $player) {
|
||||||
|
/** @var Player $player */
|
||||||
|
if (!$player->isSpectator) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Count of all Spectators
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getSpectatorCount() {
|
||||||
|
$count = 0;
|
||||||
|
foreach ($this->players as $player) {
|
||||||
|
/** @var Player $player */
|
||||||
|
if ($player->isSpectator) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a Player by his index
|
||||||
|
*
|
||||||
|
* @param $index
|
||||||
|
* @param bool $connectedPlayersOnly
|
||||||
|
* @return Player|null
|
||||||
|
*/
|
||||||
|
public function getPlayerByIndex($index, $connectedPlayersOnly = false) {
|
||||||
|
foreach ($this->players as $player) {
|
||||||
|
/** @var Player $player */
|
||||||
|
if ($player->index == $index) {
|
||||||
|
return $player;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($connectedPlayersOnly) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//Player is not online -> get Player from Database
|
||||||
|
return $this->getPlayerFromDatabaseByIndex($index);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get's a Player out of the database
|
||||||
|
*
|
||||||
|
* @param $playerIndex
|
||||||
|
* @return Player $player
|
||||||
|
*/
|
||||||
|
private function getPlayerFromDatabaseByIndex($playerIndex) {
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
|
||||||
|
if (!is_numeric($playerIndex)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = "SELECT * FROM `" . self::TABLE_PLAYERS . "` WHERE `index` = " . $playerIndex . ";";
|
||||||
|
$result = $mysqli->query($query);
|
||||||
|
if (!$result) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$row = $result->fetch_object();
|
||||||
|
$result->close();
|
||||||
|
|
||||||
|
if (!isset($row)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$player = new Player(null);
|
||||||
|
$player->index = $playerIndex;
|
||||||
|
$player->login = $row->login;
|
||||||
|
$player->rawNickname = $row->nickname;
|
||||||
|
$player->nickname = Formatter::stripDirtyCodes($player->rawNickname);
|
||||||
|
$player->path = $row->path;
|
||||||
|
$player->authLevel = $row->authLevel;
|
||||||
|
|
||||||
|
return $player;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,8 @@ use ManiaControl\ManiaControl;
|
|||||||
/**
|
/**
|
||||||
* Interface for ManiaControl Plugins
|
* Interface for ManiaControl Plugins
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
interface Plugin {
|
interface Plugin {
|
||||||
@ -24,19 +24,6 @@ interface Plugin {
|
|||||||
*/
|
*/
|
||||||
public static function prepare(ManiaControl $maniaControl);
|
public static function prepare(ManiaControl $maniaControl);
|
||||||
|
|
||||||
/**
|
|
||||||
* Load the plugin
|
|
||||||
*
|
|
||||||
* @param \ManiaControl\ManiaControl $maniaControl
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function load(ManiaControl $maniaControl);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unload the plugin and its Resources
|
|
||||||
*/
|
|
||||||
public function unload();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get plugin id
|
* Get plugin id
|
||||||
*
|
*
|
||||||
@ -71,4 +58,17 @@ interface Plugin {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getDescription();
|
public static function getDescription();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the plugin
|
||||||
|
*
|
||||||
|
* @param \ManiaControl\ManiaControl $maniaControl
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function load(ManiaControl $maniaControl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unload the plugin and its Resources
|
||||||
|
*/
|
||||||
|
public function unload();
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,8 @@ use ManiaControl\Players\Player;
|
|||||||
/**
|
/**
|
||||||
* Configurator for enabling and disabling Plugins
|
* Configurator for enabling and disabling Plugins
|
||||||
*
|
*
|
||||||
* @author steeffeen
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAnswerListener {
|
class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAnswerListener {
|
||||||
@ -58,6 +58,7 @@ class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, Manialink
|
|||||||
* @param float $width
|
* @param float $width
|
||||||
* @param float $height
|
* @param float $height
|
||||||
* @param Script $script
|
* @param Script $script
|
||||||
|
* @param Player $player
|
||||||
* @return \FML\Controls\Frame
|
* @return \FML\Controls\Frame
|
||||||
*/
|
*/
|
||||||
public function getMenu($width, $height, Script $script, Player $player) {
|
public function getMenu($width, $height, Script $script, Player $player) {
|
||||||
@ -106,12 +107,12 @@ class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, Manialink
|
|||||||
$pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
|
$pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
|
||||||
$pluginIds = array();
|
$pluginIds = array();
|
||||||
/** @var Plugin $class */
|
/** @var Plugin $class */
|
||||||
foreach($pluginClasses as $class) {
|
foreach ($pluginClasses as $class) {
|
||||||
$pluginIds[] = $class::getId();
|
$pluginIds[] = $class::getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($pluginList as $plugin) {
|
foreach ($pluginList as $plugin) {
|
||||||
if(!in_array($plugin->id, $pluginIds)) {
|
if (!in_array($plugin->id, $pluginIds)) {
|
||||||
if (!isset($pageFrame)) {
|
if (!isset($pageFrame)) {
|
||||||
$pageFrame = new Frame();
|
$pageFrame = new Frame();
|
||||||
$frame->add($pageFrame);
|
$frame->add($pageFrame);
|
||||||
|
@ -3,16 +3,16 @@
|
|||||||
namespace ManiaControl\Plugins;
|
namespace ManiaControl\Plugins;
|
||||||
|
|
||||||
use ManiaControl\Callbacks\CallbackListener;
|
use ManiaControl\Callbacks\CallbackListener;
|
||||||
use ManiaControl\ManiaControl;
|
|
||||||
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
|
|
||||||
use ManiaControl\Callbacks\TimerListener;
|
use ManiaControl\Callbacks\TimerListener;
|
||||||
use ManiaControl\Commands\CommandListener;
|
use ManiaControl\Commands\CommandListener;
|
||||||
|
use ManiaControl\ManiaControl;
|
||||||
|
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class managing Plugins
|
* Class managing Plugins
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PluginManager {
|
class PluginManager {
|
||||||
@ -76,14 +76,64 @@ class PluginManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the plugin is running
|
* Deactivate the plugin with the given class
|
||||||
*
|
*
|
||||||
* @param string $pluginClass
|
* @param string $pluginClass
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function isPluginActive($pluginClass) {
|
public function deactivatePlugin($pluginClass) {
|
||||||
$pluginClass = $this->getPluginClass($pluginClass);
|
$pluginClass = $this->getPluginClass($pluginClass);
|
||||||
return isset($this->activePlugins[$pluginClass]);
|
if (!$this->isPluginActive($pluginClass)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$plugin = $this->activePlugins[$pluginClass];
|
||||||
|
/**
|
||||||
|
* @var Plugin $plugin
|
||||||
|
*/
|
||||||
|
$plugin->unload();
|
||||||
|
unset($this->activePlugins[$pluginClass]);
|
||||||
|
if ($plugin instanceof CallbackListener) {
|
||||||
|
$this->maniaControl->callbackManager->unregisterCallbackListener($plugin);
|
||||||
|
$this->maniaControl->callbackManager->unregisterScriptCallbackListener($plugin);
|
||||||
|
}
|
||||||
|
if ($plugin instanceof CommandListener) {
|
||||||
|
$this->maniaControl->commandManager->unregisterCommandListener($plugin);
|
||||||
|
}
|
||||||
|
if ($plugin instanceof ManialinkPageAnswerListener) {
|
||||||
|
$this->maniaControl->manialinkManager->unregisterManialinkPageAnswerListener($plugin);
|
||||||
|
}
|
||||||
|
if ($plugin instanceof TimerListener) {
|
||||||
|
$this->maniaControl->timerManager->unregisterTimerListenings($plugin);
|
||||||
|
}
|
||||||
|
$this->savePluginStatus($pluginClass, false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Class of the Plugin
|
||||||
|
*
|
||||||
|
* @param mixed $pluginClass
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getPluginClass($pluginClass) {
|
||||||
|
$pluginClass = self::getClass($pluginClass);
|
||||||
|
if (!self::isPluginClass($pluginClass)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $pluginClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Class of the Object
|
||||||
|
*
|
||||||
|
* @param mixed $object
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private static function getClass($object) {
|
||||||
|
if (is_object($object)) {
|
||||||
|
return get_class($object);
|
||||||
|
}
|
||||||
|
return (string)$object;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -104,95 +154,46 @@ class PluginManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add the class to array of loaded plugin classes
|
* Check if the plugin is running
|
||||||
*
|
*
|
||||||
* @param string $pluginClass
|
* @param string $pluginClass
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function addPluginClass($pluginClass) {
|
public function isPluginActive($pluginClass) {
|
||||||
$pluginClass = $this->getPluginClass($pluginClass);
|
$pluginClass = $this->getPluginClass($pluginClass);
|
||||||
if (in_array($pluginClass, $this->pluginClasses)) {
|
return isset($this->activePlugins[$pluginClass]);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!$this->isPluginClass($pluginClass)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
array_push($this->pluginClasses, $pluginClass);
|
|
||||||
sort($this->pluginClasses);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Activate and start the plugin with the given name
|
* Save plugin status in database
|
||||||
*
|
*
|
||||||
* @param string $pluginClass
|
* @param string $className
|
||||||
* @param string $adminLogin
|
* @param bool $active
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function activatePlugin($pluginClass, $adminLogin = null) {
|
private function savePluginStatus($className, $active) {
|
||||||
if (!is_string($pluginClass)) {
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
$pluginStatusQuery = "INSERT INTO `" . self::TABLE_PLUGINS . "` (
|
||||||
|
`className`,
|
||||||
|
`active`
|
||||||
|
) VALUES (
|
||||||
|
?, ?
|
||||||
|
) ON DUPLICATE KEY UPDATE
|
||||||
|
`active` = VALUES(`active`);";
|
||||||
|
$pluginStatement = $mysqli->prepare($pluginStatusQuery);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!$this->isPluginClass($pluginClass)) {
|
$activeInt = ($active ? 1 : 0);
|
||||||
|
$pluginStatement->bind_param('si', $className, $activeInt);
|
||||||
|
$pluginStatement->execute();
|
||||||
|
if ($pluginStatement->error) {
|
||||||
|
trigger_error($pluginStatement->error);
|
||||||
|
$pluginStatement->close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ($this->isPluginActive($pluginClass)) {
|
$pluginStatement->close();
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$plugin = new $pluginClass();
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @var Plugin $plugin
|
|
||||||
*/
|
|
||||||
$this->activePlugins[$pluginClass] = $plugin;
|
|
||||||
$this->savePluginStatus($pluginClass, true);
|
|
||||||
try {
|
|
||||||
$plugin->load($this->maniaControl);
|
|
||||||
}
|
|
||||||
catch (\Exception $e) {
|
|
||||||
$this->maniaControl->chat->sendError('Error while plugin activating ' . $pluginClass . ': ' . $e->getMessage(), $adminLogin);
|
|
||||||
$this->maniaControl->log('Error while plugin activation: ' . $pluginClass . ': ' . $e->getMessage());
|
|
||||||
unset($this->activePlugins[$pluginClass]);
|
|
||||||
$this->savePluginStatus($pluginClass, false);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->savePluginStatus($pluginClass, true);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deactivate the plugin with the given class
|
|
||||||
*
|
|
||||||
* @param string $pluginClass
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function deactivatePlugin($pluginClass) {
|
|
||||||
$pluginClass = $this->getPluginClass($pluginClass);
|
|
||||||
if (!$this->isPluginActive($pluginClass)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$plugin = $this->activePlugins[$pluginClass];
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @var Plugin $plugin
|
|
||||||
*/
|
|
||||||
$plugin->unload();
|
|
||||||
unset($this->activePlugins[$pluginClass]);
|
|
||||||
if ($plugin instanceof CallbackListener) {
|
|
||||||
$this->maniaControl->callbackManager->unregisterCallbackListener($plugin);
|
|
||||||
$this->maniaControl->callbackManager->unregisterScriptCallbackListener($plugin);
|
|
||||||
}
|
|
||||||
if ($plugin instanceof CommandListener) {
|
|
||||||
$this->maniaControl->commandManager->unregisterCommandListener($plugin);
|
|
||||||
}
|
|
||||||
if ($plugin instanceof ManialinkPageAnswerListener) {
|
|
||||||
$this->maniaControl->manialinkManager->unregisterManialinkPageAnswerListener($plugin);
|
|
||||||
}
|
|
||||||
if ($plugin instanceof TimerListener) {
|
|
||||||
$this->maniaControl->timerManager->unregisterTimerListenings($plugin);
|
|
||||||
}
|
|
||||||
$this->savePluginStatus($pluginClass, false);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,66 +266,21 @@ class PluginManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a Plugin if it is activated
|
* Add the class to array of loaded plugin classes
|
||||||
*
|
*
|
||||||
* @param string $pluginClass
|
* @param string $pluginClass
|
||||||
* @return Plugin
|
|
||||||
*/
|
|
||||||
public function getPlugin($pluginClass) {
|
|
||||||
if ($this->isPluginActive($pluginClass)) {
|
|
||||||
return $this->activePlugins[$pluginClass];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all declared plugin class names
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getPluginClasses() {
|
|
||||||
return $this->pluginClasses;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all active plugins
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getActivePlugins() {
|
|
||||||
return $this->activePlugins;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save plugin status in database
|
|
||||||
*
|
|
||||||
* @param string $className
|
|
||||||
* @param bool $active
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
private function savePluginStatus($className, $active) {
|
public function addPluginClass($pluginClass) {
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
$pluginClass = $this->getPluginClass($pluginClass);
|
||||||
$pluginStatusQuery = "INSERT INTO `" . self::TABLE_PLUGINS . "` (
|
if (in_array($pluginClass, $this->pluginClasses)) {
|
||||||
`className`,
|
|
||||||
`active`
|
|
||||||
) VALUES (
|
|
||||||
?, ?
|
|
||||||
) ON DUPLICATE KEY UPDATE
|
|
||||||
`active` = VALUES(`active`);";
|
|
||||||
$pluginStatement = $mysqli->prepare($pluginStatusQuery);
|
|
||||||
if ($mysqli->error) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$activeInt = ($active ? 1 : 0);
|
if (!$this->isPluginClass($pluginClass)) {
|
||||||
$pluginStatement->bind_param('si', $className, $activeInt);
|
|
||||||
$pluginStatement->execute();
|
|
||||||
if ($pluginStatement->error) {
|
|
||||||
trigger_error($pluginStatement->error);
|
|
||||||
$pluginStatement->close();
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$pluginStatement->close();
|
array_push($this->pluginClasses, $pluginClass);
|
||||||
|
sort($this->pluginClasses);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,6 +321,74 @@ class PluginManager {
|
|||||||
return $active;
|
return $active;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activate and start the plugin with the given name
|
||||||
|
*
|
||||||
|
* @param string $pluginClass
|
||||||
|
* @param string $adminLogin
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function activatePlugin($pluginClass, $adminLogin = null) {
|
||||||
|
if (!is_string($pluginClass)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!$this->isPluginClass($pluginClass)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($this->isPluginActive($pluginClass)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$plugin = new $pluginClass();
|
||||||
|
/**
|
||||||
|
* @var Plugin $plugin
|
||||||
|
*/
|
||||||
|
$this->activePlugins[$pluginClass] = $plugin;
|
||||||
|
$this->savePluginStatus($pluginClass, true);
|
||||||
|
try {
|
||||||
|
$plugin->load($this->maniaControl);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->maniaControl->chat->sendError('Error while plugin activating ' . $pluginClass . ': ' . $e->getMessage(), $adminLogin);
|
||||||
|
$this->maniaControl->log('Error while plugin activation: ' . $pluginClass . ': ' . $e->getMessage());
|
||||||
|
unset($this->activePlugins[$pluginClass]);
|
||||||
|
$this->savePluginStatus($pluginClass, false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->savePluginStatus($pluginClass, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a Plugin if it is activated
|
||||||
|
*
|
||||||
|
* @param string $pluginClass
|
||||||
|
* @return Plugin
|
||||||
|
*/
|
||||||
|
public function getPlugin($pluginClass) {
|
||||||
|
if ($this->isPluginActive($pluginClass)) {
|
||||||
|
return $this->activePlugins[$pluginClass];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all declared plugin class names
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getPluginClasses() {
|
||||||
|
return $this->pluginClasses;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all active plugins
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getActivePlugins() {
|
||||||
|
return $this->activePlugins;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch the Plugins List from the ManiaControl Website
|
* Fetch the Plugins List from the ManiaControl Website
|
||||||
*
|
*
|
||||||
@ -373,36 +397,9 @@ class PluginManager {
|
|||||||
public function fetchPluginList($function) {
|
public function fetchPluginList($function) {
|
||||||
$url = ManiaControl::URL_WEBSERVICE . 'plugins';
|
$url = ManiaControl::URL_WEBSERVICE . 'plugins';
|
||||||
|
|
||||||
$this->maniaControl->fileReader->loadFile($url, function ($dataJson, $error) use(&$function) {
|
$this->maniaControl->fileReader->loadFile($url, function ($dataJson, $error) use (&$function) {
|
||||||
$data = json_decode($dataJson);
|
$data = json_decode($dataJson);
|
||||||
call_user_func($function, $data, $error);
|
call_user_func($function, $data, $error);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Class of the Plugin
|
|
||||||
*
|
|
||||||
* @param mixed $pluginClass
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function getPluginClass($pluginClass) {
|
|
||||||
$pluginClass = self::getClass($pluginClass);
|
|
||||||
if (!self::isPluginClass($pluginClass)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return $pluginClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Class of the Object
|
|
||||||
*
|
|
||||||
* @param mixed $pluginClass
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private static function getClass($object) {
|
|
||||||
if (is_object($object)) {
|
|
||||||
return get_class($object);
|
|
||||||
}
|
|
||||||
return (string) $object;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@ use FML\Controls\Frame;
|
|||||||
use FML\Controls\Label;
|
use FML\Controls\Label;
|
||||||
use FML\Controls\Labels\Label_Button;
|
use FML\Controls\Labels\Label_Button;
|
||||||
use FML\Controls\Labels\Label_Text;
|
use FML\Controls\Labels\Label_Text;
|
||||||
use FML\Controls\Quads\Quad_Icons128x32_1;
|
|
||||||
use FML\Controls\Quads\Quad_Icons128x128_1;
|
use FML\Controls\Quads\Quad_Icons128x128_1;
|
||||||
|
use FML\Controls\Quads\Quad_Icons128x32_1;
|
||||||
use FML\Controls\Quads\Quad_Icons64x64_1;
|
use FML\Controls\Quads\Quad_Icons64x64_1;
|
||||||
use FML\Script\Features\Paging;
|
use FML\Script\Features\Paging;
|
||||||
use FML\Script\Script;
|
use FML\Script\Script;
|
||||||
@ -25,8 +25,8 @@ use ManiaControl\Players\Player;
|
|||||||
/**
|
/**
|
||||||
* Configurator for enabling and disabling Plugins
|
* Configurator for enabling and disabling Plugins
|
||||||
*
|
*
|
||||||
* @author ManiaControl Team
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAnswerListener {
|
class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAnswerListener {
|
||||||
@ -62,13 +62,6 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
|
|||||||
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_CHANGE_PLUGIN_SETTINGS, AuthenticationManager::AUTH_LEVEL_SUPERADMIN);
|
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_CHANGE_PLUGIN_SETTINGS, AuthenticationManager::AUTH_LEVEL_SUPERADMIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
|
|
||||||
*/
|
|
||||||
public function getTitle() {
|
|
||||||
return 'Plugins';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns Back to the Plugins
|
* Returns Back to the Plugins
|
||||||
*/
|
*/
|
||||||
@ -78,6 +71,13 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
|
|||||||
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
|
||||||
|
*/
|
||||||
|
public function getTitle() {
|
||||||
|
return 'Plugins';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
|
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
|
||||||
*/
|
*/
|
||||||
@ -128,7 +128,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
|
|||||||
$y = 0;
|
$y = 0;
|
||||||
$index = 1;
|
$index = 1;
|
||||||
$settingHeight = 5.;
|
$settingHeight = 5.;
|
||||||
foreach($settings as $setting) {
|
foreach ($settings as $setting) {
|
||||||
if (!isset($pageFrame)) {
|
if (!isset($pageFrame)) {
|
||||||
$pageFrame = new Frame();
|
$pageFrame = new Frame();
|
||||||
$frame->add($pageFrame);
|
$frame->add($pageFrame);
|
||||||
@ -244,11 +244,11 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
|
|||||||
$y = 0.;
|
$y = 0.;
|
||||||
$pluginUpdates = $this->maniaControl->updateManager->pluginUpdateManager->getPluginsUpdates();
|
$pluginUpdates = $this->maniaControl->updateManager->pluginUpdateManager->getPluginsUpdates();
|
||||||
|
|
||||||
usort($pluginClasses, function($a, $b) {
|
usort($pluginClasses, function ($a, $b) {
|
||||||
return strcmp($a::getName(), $b::getName());
|
return strcmp($a::getName(), $b::getName());
|
||||||
});
|
});
|
||||||
|
|
||||||
foreach($pluginClasses as $index => $pluginClass) {
|
foreach ($pluginClasses as $index => $pluginClass) {
|
||||||
/** @var Plugin $pluginClass */
|
/** @var Plugin $pluginClass */
|
||||||
if (!isset($pageFrame)) {
|
if (!isset($pageFrame)) {
|
||||||
$pageFrame = new Frame();
|
$pageFrame = new Frame();
|
||||||
@ -340,7 +340,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($pluginUpdates != false) {
|
if ($pluginUpdates != false) {
|
||||||
$updatePluginsButton = new Label_Button();
|
$updatePluginsButton = new Label_Button();
|
||||||
$frame->add($updatePluginsButton);
|
$frame->add($updatePluginsButton);
|
||||||
$updatePluginsButton->setHAlign(Control::RIGHT);
|
$updatePluginsButton->setHAlign(Control::RIGHT);
|
||||||
@ -349,48 +349,13 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
|
|||||||
$updatePluginsButton->setZ(2);
|
$updatePluginsButton->setZ(2);
|
||||||
$updatePluginsButton->setWidth(10);
|
$updatePluginsButton->setWidth(10);
|
||||||
$updatePluginsButton->setStyle($updatePluginsButton::STYLE_CardButtonSmallS);
|
$updatePluginsButton->setStyle($updatePluginsButton::STYLE_CardButtonSmallS);
|
||||||
$updatePluginsButton->setText(count($pluginUpdates).' update(s)');
|
$updatePluginsButton->setText(count($pluginUpdates) . ' update(s)');
|
||||||
$updatePluginsButton->setAction(self::ACTION_UPDATEPLUGINS);
|
$updatePluginsButton->setAction(self::ACTION_UPDATEPLUGINS);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $frame;
|
return $frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
|
|
||||||
*/
|
|
||||||
public function saveConfigData(array $configData, Player $player) {
|
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_PLUGIN_SETTINGS)) {
|
|
||||||
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!$configData[3] || strpos($configData[3][0]['Name'], self::ACTION_PREFIX_SETTING) !== 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$maniaControlSettings = $this->maniaControl->settingManager->getSettings();
|
|
||||||
|
|
||||||
$prefixLength = strlen(self::ACTION_PREFIX_SETTING);
|
|
||||||
|
|
||||||
foreach($configData[3] as $setting) {
|
|
||||||
$settingName = substr($setting['Name'], $prefixLength + 1);
|
|
||||||
|
|
||||||
if(!isset($maniaControlSettings[$settingName]))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
$oldSetting = $maniaControlSettings[$settingName];
|
|
||||||
if ($setting['Value'] == $oldSetting->value || $oldSetting->type == 'bool') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, $setting['Value']);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Reopen the Menu
|
|
||||||
$menuId = $this->maniaControl->configurator->getMenuId($this->getTitle());
|
|
||||||
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle PlayerManialinkPageAnswer callback
|
* Handle PlayerManialinkPageAnswer callback
|
||||||
*
|
*
|
||||||
@ -456,7 +421,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggles a Boolean Value
|
* Toggle a Boolean Value
|
||||||
*
|
*
|
||||||
* @param $setting
|
* @param $setting
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
@ -481,4 +446,40 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
|
|||||||
$this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, "1");
|
$this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, "1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
|
||||||
|
*/
|
||||||
|
public function saveConfigData(array $configData, Player $player) {
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_PLUGIN_SETTINGS)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!$configData[3] || strpos($configData[3][0]['Name'], self::ACTION_PREFIX_SETTING) !== 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$maniaControlSettings = $this->maniaControl->settingManager->getSettings();
|
||||||
|
|
||||||
|
$prefixLength = strlen(self::ACTION_PREFIX_SETTING);
|
||||||
|
|
||||||
|
foreach ($configData[3] as $setting) {
|
||||||
|
$settingName = substr($setting['Name'], $prefixLength + 1);
|
||||||
|
|
||||||
|
if (!isset($maniaControlSettings[$settingName])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$oldSetting = $maniaControlSettings[$settingName];
|
||||||
|
if ($setting['Value'] == $oldSetting->value || $oldSetting->type == 'bool') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, $setting['Value']);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Reopen the Menu
|
||||||
|
$menuId = $this->maniaControl->configurator->getMenuId($this->getTitle());
|
||||||
|
$this->maniaControl->configurator->reopenMenu($player, $menuId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl\Server;
|
|||||||
/**
|
/**
|
||||||
* Model Class holding the Server Config
|
* Model Class holding the Server Config
|
||||||
*
|
*
|
||||||
* @author steeffeen
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class Config {
|
class Config {
|
||||||
|
@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
|
|||||||
/**
|
/**
|
||||||
* Class managing Rankings
|
* Class managing Rankings
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class RankingManager implements CallbackListener {
|
class RankingManager implements CallbackListener {
|
||||||
@ -42,20 +42,10 @@ class RankingManager implements CallbackListener {
|
|||||||
public function onInit() {
|
public function onInit() {
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_GetRankings', '');
|
$this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_GetRankings', '');
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Rankings
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getRankings() {
|
|
||||||
return $this->rankings;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle stats on callbacks (never call this Method)
|
* Handle stats on callbacks (never call this Method)
|
||||||
*
|
*
|
||||||
@ -65,7 +55,7 @@ class RankingManager implements CallbackListener {
|
|||||||
$callbackName = $callback[1][0];
|
$callbackName = $callback[1][0];
|
||||||
|
|
||||||
//TODO not tested in TrackMania
|
//TODO not tested in TrackMania
|
||||||
switch($callbackName) {
|
switch ($callbackName) {
|
||||||
case 'updateRankings':
|
case 'updateRankings':
|
||||||
$this->updateRankings($callback[1][1][0]);
|
$this->updateRankings($callback[1][1][0]);
|
||||||
break;
|
break;
|
||||||
@ -89,7 +79,7 @@ class RankingManager implements CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$scores = explode(';', $data);
|
$scores = explode(';', $data);
|
||||||
foreach($scores as $player) {
|
foreach ($scores as $player) {
|
||||||
if (strpos($player, ':') !== false) {
|
if (strpos($player, ':') !== false) {
|
||||||
$tmp = explode(':', $player);
|
$tmp = explode(':', $player);
|
||||||
$this->rankings[$tmp[0]] = $tmp[1];
|
$this->rankings[$tmp[0]] = $tmp[1];
|
||||||
@ -101,6 +91,15 @@ class RankingManager implements CallbackListener {
|
|||||||
$this->maniaControl->callbackManager->triggerCallback(Callbacks::RANKINGSUPDATED, $this->getRankings());
|
$this->maniaControl->callbackManager->triggerCallback(Callbacks::RANKINGSUPDATED, $this->getRankings());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Rankings
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getRankings() {
|
||||||
|
return $this->rankings;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Current Leading Players (as Login Array)
|
* Get the Current Leading Players (as Login Array)
|
||||||
*
|
*
|
||||||
@ -109,7 +108,7 @@ class RankingManager implements CallbackListener {
|
|||||||
public function getLeaders() {
|
public function getLeaders() {
|
||||||
$leaders = array();
|
$leaders = array();
|
||||||
$prev = -1;
|
$prev = -1;
|
||||||
foreach($this->rankings as $score) {
|
foreach ($this->rankings as $score) {
|
||||||
if ($prev != -1 && $prev < $score) {
|
if ($prev != -1 && $prev < $score) {
|
||||||
return $leaders;
|
return $leaders;
|
||||||
}
|
}
|
||||||
|
@ -4,15 +4,15 @@ namespace ManiaControl\Server;
|
|||||||
|
|
||||||
use ManiaControl\Callbacks\CallbackListener;
|
use ManiaControl\Callbacks\CallbackListener;
|
||||||
use ManiaControl\Callbacks\CallbackManager;
|
use ManiaControl\Callbacks\CallbackManager;
|
||||||
|
use ManiaControl\CommandLineHelper;
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
||||||
use ManiaControl\CommandLineHelper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class providing Access to the connected ManiaPlanet Server
|
* Class providing Access to the connected ManiaPlanet Server
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class Server implements CallbackListener {
|
class Server implements CallbackListener {
|
||||||
@ -26,7 +26,6 @@ class Server implements CallbackListener {
|
|||||||
* Public Properties
|
* Public Properties
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var Config $config
|
* @var Config $config
|
||||||
*/
|
*/
|
||||||
public $config = null;
|
public $config = null;
|
||||||
@ -64,6 +63,33 @@ class Server implements CallbackListener {
|
|||||||
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_ONINIT, $this, 'onInit');
|
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_ONINIT, $this, 'onInit');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize necessary Database Tables
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function initTables() {
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SERVERS . "` (
|
||||||
|
`index` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`login` varchar(100) NOT NULL,
|
||||||
|
PRIMARY KEY (`index`),
|
||||||
|
UNIQUE KEY `login` (`login`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Servers' AUTO_INCREMENT=1;";
|
||||||
|
$statement = $mysqli->prepare($query);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error, E_USER_ERROR);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$statement->execute();
|
||||||
|
if ($statement->error) {
|
||||||
|
trigger_error($statement->error, E_USER_ERROR);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$statement->close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the Server Configuration from the Config XML
|
* Load the Server Configuration from the Config XML
|
||||||
*/
|
*/
|
||||||
@ -81,8 +107,7 @@ class Server implements CallbackListener {
|
|||||||
if (!$serverTag) {
|
if (!$serverTag) {
|
||||||
trigger_error("No Server configured with the ID '{$serverId}'!", E_USER_ERROR);
|
trigger_error("No Server configured with the ID '{$serverId}'!", E_USER_ERROR);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$serverTags = $this->maniaControl->config->xpath('server');
|
$serverTags = $this->maniaControl->config->xpath('server');
|
||||||
if ($serverTags) {
|
if ($serverTags) {
|
||||||
$serverTag = $serverTags[0];
|
$serverTag = $serverTags[0];
|
||||||
@ -95,7 +120,7 @@ class Server implements CallbackListener {
|
|||||||
// Host
|
// Host
|
||||||
$host = $serverTag->xpath('host');
|
$host = $serverTag->xpath('host');
|
||||||
if ($host) {
|
if ($host) {
|
||||||
$host = (string) $host[0];
|
$host = (string)$host[0];
|
||||||
}
|
}
|
||||||
if (!$host) {
|
if (!$host) {
|
||||||
trigger_error("Invalid server configuration (host).", E_USER_ERROR);
|
trigger_error("Invalid server configuration (host).", E_USER_ERROR);
|
||||||
@ -104,7 +129,7 @@ class Server implements CallbackListener {
|
|||||||
// Port
|
// Port
|
||||||
$port = $serverTag->xpath('port');
|
$port = $serverTag->xpath('port');
|
||||||
if ($port) {
|
if ($port) {
|
||||||
$port = (string) $port[0];
|
$port = (string)$port[0];
|
||||||
}
|
}
|
||||||
if (!$port) {
|
if (!$port) {
|
||||||
trigger_error("Invalid server configuration (port).", E_USER_ERROR);
|
trigger_error("Invalid server configuration (port).", E_USER_ERROR);
|
||||||
@ -113,7 +138,7 @@ class Server implements CallbackListener {
|
|||||||
// Login
|
// Login
|
||||||
$login = $serverTag->xpath('login');
|
$login = $serverTag->xpath('login');
|
||||||
if ($login) {
|
if ($login) {
|
||||||
$login = (string) $login[0];
|
$login = (string)$login[0];
|
||||||
}
|
}
|
||||||
if (!$login) {
|
if (!$login) {
|
||||||
trigger_error("Invalid server configuration (login).", E_USER_ERROR);
|
trigger_error("Invalid server configuration (login).", E_USER_ERROR);
|
||||||
@ -122,7 +147,7 @@ class Server implements CallbackListener {
|
|||||||
// Password
|
// Password
|
||||||
$pass = $serverTag->xpath('pass');
|
$pass = $serverTag->xpath('pass');
|
||||||
if ($pass) {
|
if ($pass) {
|
||||||
$pass = (string) $pass[0];
|
$pass = (string)$pass[0];
|
||||||
}
|
}
|
||||||
if (!$pass) {
|
if (!$pass) {
|
||||||
trigger_error("Invalid server configuration (password).", E_USER_ERROR);
|
trigger_error("Invalid server configuration (password).", E_USER_ERROR);
|
||||||
@ -132,6 +157,36 @@ class Server implements CallbackListener {
|
|||||||
$this->config = new Config($serverId, $host, $port, $login, $pass);
|
$this->config = new Config($serverId, $host, $port, $login, $pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all Servers from the Database
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getAllServers() {
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
$query = "SELECT * FROM `" . self::TABLE_SERVERS . "`";
|
||||||
|
$result = $mysqli->query($query);
|
||||||
|
if (!$result) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$servers = array();
|
||||||
|
while ($row = $result->fetch_object()) {
|
||||||
|
array_push($servers, $row);
|
||||||
|
}
|
||||||
|
$result->close();
|
||||||
|
|
||||||
|
return $servers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle OnInit Callback
|
||||||
|
*/
|
||||||
|
public function onInit() {
|
||||||
|
$this->updateProperties();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Refetch the Server Properties
|
* Refetch the Server Properties
|
||||||
*/
|
*/
|
||||||
@ -168,63 +223,6 @@ class Server implements CallbackListener {
|
|||||||
$statement->close();
|
$statement->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize necessary Database Tables
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function initTables() {
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SERVERS . "` (
|
|
||||||
`index` int(11) NOT NULL AUTO_INCREMENT,
|
|
||||||
`login` varchar(100) NOT NULL,
|
|
||||||
PRIMARY KEY (`index`),
|
|
||||||
UNIQUE KEY `login` (`login`)
|
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Servers' AUTO_INCREMENT=1;";
|
|
||||||
$statement = $mysqli->prepare($query);
|
|
||||||
if ($mysqli->error) {
|
|
||||||
trigger_error($mysqli->error, E_USER_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$statement->execute();
|
|
||||||
if ($statement->error) {
|
|
||||||
trigger_error($statement->error, E_USER_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$statement->close();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets all Servers from the Database
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getAllServers() {
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
$query = "SELECT * FROM `" . self::TABLE_SERVERS . "`";
|
|
||||||
$result = $mysqli->query($query);
|
|
||||||
if (!$result) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$servers = array();
|
|
||||||
while ($row = $result->fetch_object()) {
|
|
||||||
array_push($servers, $row);
|
|
||||||
}
|
|
||||||
$result->close();
|
|
||||||
|
|
||||||
return $servers;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle OnInit Callback
|
|
||||||
*/
|
|
||||||
public function onInit() {
|
|
||||||
$this->updateProperties();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set if the Server Runs a Team-Mode or not
|
* Set if the Server Runs a Team-Mode or not
|
||||||
*
|
*
|
||||||
@ -249,18 +247,6 @@ class Server implements CallbackListener {
|
|||||||
return $this->teamMode;
|
return $this->teamMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch Game Data Directory
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getDataDirectory() {
|
|
||||||
if ($this->dataDirectory == '') {
|
|
||||||
$this->dataDirectory = $this->maniaControl->client->gameDataDirectory();
|
|
||||||
}
|
|
||||||
return $this->dataDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch Maps Directory
|
* Fetch Maps Directory
|
||||||
*
|
*
|
||||||
@ -275,16 +261,15 @@ class Server implements CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if ManiaControl has Access to the given Directory
|
* Fetch Game Data Directory
|
||||||
*
|
*
|
||||||
* @param string $directory
|
* @return string
|
||||||
* @return bool
|
|
||||||
*/
|
*/
|
||||||
public function checkAccess($directory) {
|
public function getDataDirectory() {
|
||||||
if (!$directory) {
|
if ($this->dataDirectory == '') {
|
||||||
return false;
|
$this->dataDirectory = $this->maniaControl->client->gameDataDirectory();
|
||||||
}
|
}
|
||||||
return (is_dir($directory) && is_writable($directory));
|
return $this->dataDirectory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -296,43 +281,6 @@ class Server implements CallbackListener {
|
|||||||
return $this->maniaControl->client->getMainServerPlayerInfo();
|
return $this->maniaControl->client->getMainServerPlayerInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch current Game Mode
|
|
||||||
*
|
|
||||||
* @param bool $stringValue
|
|
||||||
* @param int $parseValue
|
|
||||||
* @return int | string
|
|
||||||
*/
|
|
||||||
public function getGameMode($stringValue = false, $parseValue = null) {
|
|
||||||
if (is_int($parseValue)) {
|
|
||||||
$gameMode = $parseValue;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$gameMode = $this->maniaControl->client->getGameMode();
|
|
||||||
}
|
|
||||||
if ($stringValue) {
|
|
||||||
switch ($gameMode) {
|
|
||||||
case 0:
|
|
||||||
return 'Script';
|
|
||||||
case 1:
|
|
||||||
return 'Rounds';
|
|
||||||
case 2:
|
|
||||||
return 'TimeAttack';
|
|
||||||
case 3:
|
|
||||||
return 'Team';
|
|
||||||
case 4:
|
|
||||||
return 'Laps';
|
|
||||||
case 5:
|
|
||||||
return 'Cup';
|
|
||||||
case 6:
|
|
||||||
return 'Stunts';
|
|
||||||
default:
|
|
||||||
return 'Unknown';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $gameMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve Validation Replay for the given Player
|
* Retrieve Validation Replay for the given Player
|
||||||
*
|
*
|
||||||
@ -342,8 +290,7 @@ class Server implements CallbackListener {
|
|||||||
public function getValidationReplay($login) {
|
public function getValidationReplay($login) {
|
||||||
try {
|
try {
|
||||||
$replay = $this->maniaControl->client->getValidationReplay($login);
|
$replay = $this->maniaControl->client->getValidationReplay($login);
|
||||||
}
|
} catch (Exception $e) {
|
||||||
catch (Exception $e) {
|
|
||||||
// TODO temp added 19.04.2014
|
// TODO temp added 19.04.2014
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 330 Server.php" . $e->getMessage());
|
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 330 Server.php" . $e->getMessage());
|
||||||
|
|
||||||
@ -374,8 +321,7 @@ class Server implements CallbackListener {
|
|||||||
// Save ghost replay
|
// Save ghost replay
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->saveBestGhostsReplay($login, $fileName);
|
$this->maniaControl->client->saveBestGhostsReplay($login, $fileName);
|
||||||
}
|
} catch (Exception $e) {
|
||||||
catch (Exception $e) {
|
|
||||||
// TODO temp added 19.04.2014
|
// TODO temp added 19.04.2014
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 360 Server.php" . $e->getMessage());
|
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 360 Server.php" . $e->getMessage());
|
||||||
|
|
||||||
@ -392,6 +338,55 @@ class Server implements CallbackListener {
|
|||||||
return $ghostReplay;
|
return $ghostReplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if ManiaControl has Access to the given Directory
|
||||||
|
*
|
||||||
|
* @param string $directory
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function checkAccess($directory) {
|
||||||
|
if (!$directory) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return (is_dir($directory) && is_writable($directory));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch current Game Mode
|
||||||
|
*
|
||||||
|
* @param bool $stringValue
|
||||||
|
* @param int $parseValue
|
||||||
|
* @return int | string
|
||||||
|
*/
|
||||||
|
public function getGameMode($stringValue = false, $parseValue = null) {
|
||||||
|
if (is_int($parseValue)) {
|
||||||
|
$gameMode = $parseValue;
|
||||||
|
} else {
|
||||||
|
$gameMode = $this->maniaControl->client->getGameMode();
|
||||||
|
}
|
||||||
|
if ($stringValue) {
|
||||||
|
switch ($gameMode) {
|
||||||
|
case 0:
|
||||||
|
return 'Script';
|
||||||
|
case 1:
|
||||||
|
return 'Rounds';
|
||||||
|
case 2:
|
||||||
|
return 'TimeAttack';
|
||||||
|
case 3:
|
||||||
|
return 'Team';
|
||||||
|
case 4:
|
||||||
|
return 'Laps';
|
||||||
|
case 5:
|
||||||
|
return 'Cup';
|
||||||
|
case 6:
|
||||||
|
return 'Stunts';
|
||||||
|
default:
|
||||||
|
return 'Unknown';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $gameMode;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wait for the Server to have the given Status
|
* Wait for the Server to have the given Status
|
||||||
*
|
*
|
||||||
|
@ -18,8 +18,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
|
|||||||
/**
|
/**
|
||||||
* Class offering various Commands related to the Dedicated Server
|
* Class offering various Commands related to the Dedicated Server
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ServerCommands implements CallbackListener, CommandListener, ManialinkPageAnswerListener, TimerListener {
|
class ServerCommands implements CallbackListener, CommandListener, ManialinkPageAnswerListener, TimerListener {
|
||||||
@ -106,11 +106,11 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
|
|||||||
//Check if Pause exists in current GameMode
|
//Check if Pause exists in current GameMode
|
||||||
try {
|
try {
|
||||||
$scriptInfos = $this->maniaControl->client->getModeScriptInfo();
|
$scriptInfos = $this->maniaControl->client->getModeScriptInfo();
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$pauseExists = false;
|
$pauseExists = false;
|
||||||
foreach($scriptInfos->commandDescs as $param) {
|
foreach ($scriptInfos->commandDescs as $param) {
|
||||||
if ($param->name == "Command_ForceWarmUp") {
|
if ($param->name == "Command_ForceWarmUp") {
|
||||||
$pauseExists = true;
|
$pauseExists = true;
|
||||||
break;
|
break;
|
||||||
@ -161,7 +161,7 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->triggerModeScriptEvent('WarmUp_Extend', '10');
|
$this->maniaControl->client->triggerModeScriptEvent('WarmUp_Extend', '10');
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->triggerModeScriptEvent('WarmUp_Stop', '');
|
$this->maniaControl->client->triggerModeScriptEvent('WarmUp_Stop', '');
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,9 +190,10 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Breaks the current game
|
* Pause the current game
|
||||||
*
|
*
|
||||||
* @param array $callback
|
* @param array $callback
|
||||||
|
* @param Player $player
|
||||||
*/
|
*/
|
||||||
public function setPause(array $callback, Player $player) {
|
public function setPause(array $callback, Player $player) {
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_SET_PAUSE)) {
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_SET_PAUSE)) {
|
||||||
@ -200,8 +201,8 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->sendModeScriptCommands(array('Command_ForceWarmUp' => True));
|
$this->maniaControl->client->sendModeScriptCommands(array('Command_ForceWarmUp' => true));
|
||||||
} catch(NotInScriptModeException $e) {
|
} catch (NotInScriptModeException $e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,6 +232,16 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform server shutdown
|
||||||
|
*
|
||||||
|
* @param string $login
|
||||||
|
*/
|
||||||
|
private function shutdownServer($login = '#') {
|
||||||
|
$this->maniaControl->client->stopServer();
|
||||||
|
$this->maniaControl->quit("Server shutdown requested by '{$login}'");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle //systeminfo command
|
* Handle //systeminfo command
|
||||||
*
|
*
|
||||||
@ -410,14 +421,4 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
|
|||||||
$this->maniaControl->client->setMaxSpectators($amount);
|
$this->maniaControl->client->setMaxSpectators($amount);
|
||||||
$this->maniaControl->chat->sendSuccess("Changed max spectators to: {$amount}", $player->login);
|
$this->maniaControl->chat->sendSuccess("Changed max spectators to: {$amount}", $player->login);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Perform server shutdown
|
|
||||||
*
|
|
||||||
* @param string $login
|
|
||||||
*/
|
|
||||||
private function shutdownServer($login = '#') {
|
|
||||||
$this->maniaControl->client->stopServer();
|
|
||||||
$this->maniaControl->quit("Server shutdown requested by '{$login}'");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
|||||||
/**
|
/**
|
||||||
* Class reporting ManiaControl Usage for the Server
|
* Class reporting ManiaControl Usage for the Server
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class UsageReporter implements TimerListener {
|
class UsageReporter implements TimerListener {
|
||||||
@ -68,7 +68,7 @@ class UsageReporter implements TimerListener {
|
|||||||
try {
|
try {
|
||||||
$scriptName = $this->maniaControl->client->getScriptName();
|
$scriptName = $this->maniaControl->client->getScriptName();
|
||||||
$properties['ScriptName'] = $scriptName["CurrentValue"];
|
$properties['ScriptName'] = $scriptName["CurrentValue"];
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
if ($e->getMessage() == 'Not in script mode.') {
|
if ($e->getMessage() == 'Not in script mode.') {
|
||||||
$properties['ScriptName'] = '';
|
$properties['ScriptName'] = '';
|
||||||
} else {
|
} else {
|
||||||
@ -79,7 +79,7 @@ class UsageReporter implements TimerListener {
|
|||||||
$activePlugins = array();
|
$activePlugins = array();
|
||||||
|
|
||||||
if (is_array($this->maniaControl->pluginManager->getActivePlugins())) {
|
if (is_array($this->maniaControl->pluginManager->getActivePlugins())) {
|
||||||
foreach($this->maniaControl->pluginManager->getActivePlugins() as $plugin) {
|
foreach ($this->maniaControl->pluginManager->getActivePlugins() as $plugin) {
|
||||||
/** @var Plugin $plugin */
|
/** @var Plugin $plugin */
|
||||||
if (!is_null($plugin::getId()) && is_numeric($plugin::getId())) {
|
if (!is_null($plugin::getId()) && is_numeric($plugin::getId())) {
|
||||||
$activePlugins[] = $plugin::getId();
|
$activePlugins[] = $plugin::getId();
|
||||||
@ -93,7 +93,7 @@ class UsageReporter implements TimerListener {
|
|||||||
$info = base64_encode($json);
|
$info = base64_encode($json);
|
||||||
|
|
||||||
$self = $this;
|
$self = $this;
|
||||||
$this->maniaControl->fileReader->loadFile(ManiaControl::URL_WEBSERVICE . "/usagereport?info=" . urlencode($info), function ($response, $error) use(&$self){
|
$this->maniaControl->fileReader->loadFile(ManiaControl::URL_WEBSERVICE . "/usagereport?info=" . urlencode($info), function ($response, $error) use (&$self) {
|
||||||
$response = json_decode($response);
|
$response = json_decode($response);
|
||||||
if ($error || !$response) {
|
if ($error || !$response) {
|
||||||
$self->maniaControl->log("Error while Sending data: " . $error);
|
$self->maniaControl->log("Error while Sending data: " . $error);
|
||||||
|
@ -10,8 +10,8 @@ use ManiaControl\Plugins\PluginManager;
|
|||||||
/**
|
/**
|
||||||
* Class managing Settings and Configurations
|
* Class managing Settings and Configurations
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class SettingManager implements CallbackListener {
|
class SettingManager implements CallbackListener {
|
||||||
@ -45,13 +45,6 @@ class SettingManager implements CallbackListener {
|
|||||||
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_AFTERINIT, $this, 'handleAfterInit');
|
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_AFTERINIT, $this, 'handleAfterInit');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle After Init Callback
|
|
||||||
*/
|
|
||||||
public function handleAfterInit() {
|
|
||||||
$this->deleteUnusedSettings();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize necessary Database Tables
|
* Initialize necessary Database Tables
|
||||||
*
|
*
|
||||||
@ -81,93 +74,35 @@ class SettingManager implements CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Class Name of a Parameter
|
* Handle After Init Callback
|
||||||
*
|
|
||||||
* @param mixed $param
|
|
||||||
* @return string
|
|
||||||
*/
|
*/
|
||||||
private function getClassName($param) {
|
public function handleAfterInit() {
|
||||||
if (is_object($param)) {
|
$this->deleteUnusedSettings();
|
||||||
return get_class($param);
|
|
||||||
}
|
|
||||||
if (is_string($param)) {
|
|
||||||
return $param;
|
|
||||||
}
|
|
||||||
trigger_error('Invalid class param. ' . $param);
|
|
||||||
return (string) $param;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Type of a Parameter
|
* Delete all unused Settings that haven't been initialized during the current Startup
|
||||||
*
|
*
|
||||||
* @param mixed $param
|
* @return bool
|
||||||
* @return string
|
|
||||||
*/
|
*/
|
||||||
private function getType($param) {
|
private function deleteUnusedSettings() {
|
||||||
if (is_int($param)) {
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
return self::TYPE_INT;
|
$settingQuery = "DELETE FROM `" . self::TABLE_SETTINGS . "`
|
||||||
|
WHERE `changed` < NOW() - INTERVAL 1 HOUR;";
|
||||||
|
$settingStatement = $mysqli->prepare($settingQuery);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (is_real($param)) {
|
$success = $settingStatement->execute();
|
||||||
return self::TYPE_REAL;
|
if ($settingStatement->error) {
|
||||||
|
trigger_error($settingStatement->error);
|
||||||
|
$settingStatement->close();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (is_bool($param)) {
|
$settingStatement->close();
|
||||||
return self::TYPE_BOOL;
|
$this->storedSettings = array();
|
||||||
}
|
return $success;
|
||||||
if (is_string($param)) {
|
|
||||||
return self::TYPE_STRING;
|
|
||||||
}
|
|
||||||
if (is_array($param)) {
|
|
||||||
return self::TYPE_ARRAY;
|
|
||||||
}
|
|
||||||
trigger_error('Unsupported setting type. ' . print_r($param, true));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cast a Setting to the given Type
|
|
||||||
*
|
|
||||||
* @param string $type
|
|
||||||
* @param mixed $value
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
private function castSetting($type, $value) {
|
|
||||||
if ($type === self::TYPE_INT) {
|
|
||||||
return (int) $value;
|
|
||||||
}
|
|
||||||
if ($type === self::TYPE_REAL) {
|
|
||||||
return (float) $value;
|
|
||||||
}
|
|
||||||
if ($type === self::TYPE_BOOL) {
|
|
||||||
return (bool) $value;
|
|
||||||
}
|
|
||||||
if ($type === self::TYPE_STRING) {
|
|
||||||
return (string) $value;
|
|
||||||
}
|
|
||||||
if ($type === self::TYPE_ARRAY) {
|
|
||||||
return explode($this->arrayDelimiter, $value);
|
|
||||||
}
|
|
||||||
trigger_error('Unsupported setting type. ' . print_r($type, true));
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format a Setting for saving it to the Database
|
|
||||||
*
|
|
||||||
* @param mixed $value
|
|
||||||
* @param string $type
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
private function formatSetting($value, $type = null) {
|
|
||||||
if ($type === null) {
|
|
||||||
$type = $this->getType($value);
|
|
||||||
}
|
|
||||||
if ($type === self::TYPE_ARRAY) {
|
|
||||||
return implode($this->arrayDelimiter, $value);
|
|
||||||
}
|
|
||||||
if ($type === self::TYPE_BOOL) {
|
|
||||||
return ($value ? 1 : 0);
|
|
||||||
}
|
|
||||||
return $value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -217,6 +152,69 @@ class SettingManager implements CallbackListener {
|
|||||||
return $success;
|
return $success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Class Name of a Parameter
|
||||||
|
*
|
||||||
|
* @param mixed $param
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getClassName($param) {
|
||||||
|
if (is_object($param)) {
|
||||||
|
return get_class($param);
|
||||||
|
}
|
||||||
|
if (is_string($param)) {
|
||||||
|
return $param;
|
||||||
|
}
|
||||||
|
trigger_error('Invalid class param. ' . $param);
|
||||||
|
return (string)$param;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Type of a Parameter
|
||||||
|
*
|
||||||
|
* @param mixed $param
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getType($param) {
|
||||||
|
if (is_int($param)) {
|
||||||
|
return self::TYPE_INT;
|
||||||
|
}
|
||||||
|
if (is_real($param)) {
|
||||||
|
return self::TYPE_REAL;
|
||||||
|
}
|
||||||
|
if (is_bool($param)) {
|
||||||
|
return self::TYPE_BOOL;
|
||||||
|
}
|
||||||
|
if (is_string($param)) {
|
||||||
|
return self::TYPE_STRING;
|
||||||
|
}
|
||||||
|
if (is_array($param)) {
|
||||||
|
return self::TYPE_ARRAY;
|
||||||
|
}
|
||||||
|
trigger_error('Unsupported setting type. ' . print_r($param, true));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format a Setting for saving it to the Database
|
||||||
|
*
|
||||||
|
* @param mixed $value
|
||||||
|
* @param string $type
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
private function formatSetting($value, $type = null) {
|
||||||
|
if ($type === null) {
|
||||||
|
$type = $this->getType($value);
|
||||||
|
}
|
||||||
|
if ($type === self::TYPE_ARRAY) {
|
||||||
|
return implode($this->arrayDelimiter, $value);
|
||||||
|
}
|
||||||
|
if ($type === self::TYPE_BOOL) {
|
||||||
|
return ($value ? 1 : 0);
|
||||||
|
}
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a Setting by its Index
|
* Get a Setting by its Index
|
||||||
*
|
*
|
||||||
@ -327,6 +325,33 @@ class SettingManager implements CallbackListener {
|
|||||||
return $success;
|
return $success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cast a Setting to the given Type
|
||||||
|
*
|
||||||
|
* @param string $type
|
||||||
|
* @param mixed $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
private function castSetting($type, $value) {
|
||||||
|
if ($type === self::TYPE_INT) {
|
||||||
|
return (int)$value;
|
||||||
|
}
|
||||||
|
if ($type === self::TYPE_REAL) {
|
||||||
|
return (float)$value;
|
||||||
|
}
|
||||||
|
if ($type === self::TYPE_BOOL) {
|
||||||
|
return (bool)$value;
|
||||||
|
}
|
||||||
|
if ($type === self::TYPE_STRING) {
|
||||||
|
return (string)$value;
|
||||||
|
}
|
||||||
|
if ($type === self::TYPE_ARRAY) {
|
||||||
|
return explode($this->arrayDelimiter, $value);
|
||||||
|
}
|
||||||
|
trigger_error('Unsupported setting type. ' . print_r($type, true));
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reset a Setting to its default Value
|
* Reset a Setting to its default Value
|
||||||
*
|
*
|
||||||
@ -441,6 +466,7 @@ class SettingManager implements CallbackListener {
|
|||||||
/**
|
/**
|
||||||
* Get all Setting Classes
|
* Get all Setting Classes
|
||||||
*
|
*
|
||||||
|
* @param bool $hidePluginClasses
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getSettingClasses($hidePluginClasses = false) {
|
public function getSettingClasses($hidePluginClasses = false) {
|
||||||
@ -461,29 +487,4 @@ class SettingManager implements CallbackListener {
|
|||||||
$result->free();
|
$result->free();
|
||||||
return $settingClasses;
|
return $settingClasses;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete all unused Settings that haven't been initialized during the current Startup
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function deleteUnusedSettings() {
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
$settingQuery = "DELETE FROM `" . self::TABLE_SETTINGS . "`
|
|
||||||
WHERE `changed` < NOW() - INTERVAL 1 HOUR;";
|
|
||||||
$settingStatement = $mysqli->prepare($settingQuery);
|
|
||||||
if ($mysqli->error) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$success = $settingStatement->execute();
|
|
||||||
if ($settingStatement->error) {
|
|
||||||
trigger_error($settingStatement->error);
|
|
||||||
$settingStatement->close();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$settingStatement->close();
|
|
||||||
$this->storedSettings = array();
|
|
||||||
return $success;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,8 @@ use ManiaControl\Players\PlayerManager;
|
|||||||
/**
|
/**
|
||||||
* Simple Stats List Class
|
* Simple Stats List Class
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener, CommandListener {
|
class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener, CommandListener {
|
||||||
@ -82,17 +82,6 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
$this->registerStat(StatisticManager::SPECIAL_STAT_HITS_PH, 85, "H/h", 15, StatisticManager::STAT_TYPE_FLOAT);
|
$this->registerStat(StatisticManager::SPECIAL_STAT_HITS_PH, 85, "H/h", 15, StatisticManager::STAT_TYPE_FLOAT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the stat List
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function command_ShowStatsList(array $callback, Player $player) {
|
|
||||||
$this->showStatsList($player);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a Certain Stat
|
* Register a Certain Stat
|
||||||
*
|
*
|
||||||
@ -111,11 +100,21 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
$this->statsWidth += $width;
|
$this->statsWidth += $width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the stat List
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function command_ShowStatsList(array $callback, Player $player) {
|
||||||
|
$this->showStatsList($player);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show the PlayerList Widget to the Player
|
* Show the StatsList Widget to the Player
|
||||||
*
|
*
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
|
* @param string $order
|
||||||
*/
|
*/
|
||||||
public function showStatsList(Player $player, $order = PlayerManager::STAT_SERVERTIME) {
|
public function showStatsList(Player $player, $order = PlayerManager::STAT_SERVERTIME) {
|
||||||
$height = $this->maniaControl->manialinkManager->styleManager->getListWidgetsHeight();
|
$height = $this->maniaControl->manialinkManager->styleManager->getListWidgetsHeight();
|
||||||
@ -173,7 +172,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
//Compute Headline
|
//Compute Headline
|
||||||
$x = $xStart + 55;
|
$x = $xStart + 55;
|
||||||
$statRankings = array();
|
$statRankings = array();
|
||||||
foreach($this->statArray as $key => $stat) {
|
foreach ($this->statArray as $key => $stat) {
|
||||||
$ranking = $this->maniaControl->statisticManager->getStatsRanking($stat["Name"]);
|
$ranking = $this->maniaControl->statisticManager->getStatsRanking($stat["Name"]);
|
||||||
if (!empty($ranking)) {
|
if (!empty($ranking)) {
|
||||||
$statRankings[$stat["Name"]] = $ranking;
|
$statRankings[$stat["Name"]] = $ranking;
|
||||||
@ -188,7 +187,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
|
|
||||||
//Description Label
|
//Description Label
|
||||||
$i = 2;
|
$i = 2;
|
||||||
foreach($this->statArray as $statArray) {
|
foreach ($this->statArray as $statArray) {
|
||||||
if (!isset($labels[$i])) {
|
if (!isset($labels[$i])) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -197,7 +196,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
$label = $labels[$i];
|
$label = $labels[$i];
|
||||||
|
|
||||||
$label->setAction(self::ACTION_SORT_STATS . '.' . $statArray["Name"]);
|
$label->setAction(self::ACTION_SORT_STATS . '.' . $statArray["Name"]);
|
||||||
$label->addTooltipLabelFeature($descriptionLabel, '$o '.$statArray["Name"]);
|
$label->addTooltipLabelFeature($descriptionLabel, '$o ' . $statArray["Name"]);
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +212,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($statRankings[$order] as $playerId => $value) {
|
foreach ($statRankings[$order] as $playerId => $value) {
|
||||||
$listPlayer = $this->maniaControl->playerManager->getPlayerByIndex($playerId);
|
$listPlayer = $this->maniaControl->playerManager->getPlayerByIndex($playerId);
|
||||||
if ($i == 15) {
|
if ($i == 15) {
|
||||||
break;
|
break;
|
||||||
@ -234,7 +233,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
|
|
||||||
$displayArray = array();
|
$displayArray = array();
|
||||||
|
|
||||||
foreach($this->statArray as $stat) {
|
foreach ($this->statArray as $stat) {
|
||||||
$statValue = 0;
|
$statValue = 0;
|
||||||
if (isset($statRankings[$stat['Name']][$playerId])) {
|
if (isset($statRankings[$stat['Name']][$playerId])) {
|
||||||
$statValue = $statRankings[$stat['Name']][$playerId];
|
$statValue = $statRankings[$stat['Name']][$playerId];
|
||||||
@ -253,7 +252,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
|
|
||||||
|
|
||||||
$x = $xStart + 55;
|
$x = $xStart + 55;
|
||||||
foreach($displayArray as $key => $array) {
|
foreach ($displayArray as $key => $array) {
|
||||||
$label = new Label_Text();
|
$label = new Label_Text();
|
||||||
$playerFrame->add($label);
|
$playerFrame->add($label);
|
||||||
$label->setHAlign($hAlign);
|
$label->setHAlign($hAlign);
|
||||||
@ -262,7 +261,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
$label->setTextSize($textSize);
|
$label->setTextSize($textSize);
|
||||||
$label->setText($array['Value']);
|
$label->setText($array['Value']);
|
||||||
$label->setTextColor($textColor);
|
$label->setTextColor($textColor);
|
||||||
$label->addTooltipLabelFeature($descriptionLabel, '$o '.$key);
|
$label->addTooltipLabelFeature($descriptionLabel, '$o ' . $key);
|
||||||
$x += $array['Width'];
|
$x += $array['Width'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,7 +299,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
|
|||||||
|
|
||||||
$action = $actionArray[0] . "." . $actionArray[1];
|
$action = $actionArray[0] . "." . $actionArray[1];
|
||||||
|
|
||||||
switch($action) {
|
switch ($action) {
|
||||||
case self::ACTION_SORT_STATS:
|
case self::ACTION_SORT_STATS:
|
||||||
$playerLogin = $callback[1][1];
|
$playerLogin = $callback[1][1];
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($playerLogin);
|
$player = $this->maniaControl->playerManager->getPlayer($playerLogin);
|
||||||
|
@ -11,8 +11,8 @@ use ManiaControl\Players\PlayerManager;
|
|||||||
/**
|
/**
|
||||||
* Statistic Collector Class
|
* Statistic Collector Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class StatisticCollector implements CallbackListener {
|
class StatisticCollector implements CallbackListener {
|
||||||
@ -115,91 +115,12 @@ class StatisticCollector implements CallbackListener {
|
|||||||
|
|
||||||
$leaders = $this->maniaControl->server->rankingManager->getLeaders();
|
$leaders = $this->maniaControl->server->rankingManager->getLeaders();
|
||||||
|
|
||||||
foreach($leaders as $leaderLogin) {
|
foreach ($leaders as $leaderLogin) {
|
||||||
$leader = $this->maniaControl->playerManager->getPlayer($leaderLogin);
|
$leader = $this->maniaControl->playerManager->getPlayer($leaderLogin);
|
||||||
$this->maniaControl->statisticManager->incrementStat(self::STAT_MAP_WINS, $leader);
|
$this->maniaControl->statisticManager->incrementStat(self::STAT_MAP_WINS, $leader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle Player Shoots
|
|
||||||
*
|
|
||||||
* @param $login
|
|
||||||
*/
|
|
||||||
private function handleOnShoot($login, $weaponNumber) {
|
|
||||||
if (!isset($this->onShootArray[$login])) {
|
|
||||||
$this->onShootArray[$login] = array(self::WEAPON_ROCKET => 0, self::WEAPON_ARROW => 0, self::WEAPON_NUCLEUS => 0, self::WEAPON_LASER => 0);
|
|
||||||
$this->onShootArray[$login][$weaponNumber]++;
|
|
||||||
} else {
|
|
||||||
$this->onShootArray[$login][$weaponNumber]++;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Write Shoot Data into database
|
|
||||||
if (array_sum($this->onShootArray[$login]) > $this->maniaControl->settingManager->getSetting($this, self::SETTING_ON_SHOOT_PRESTORE)) {
|
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
|
||||||
|
|
||||||
$rocketShots = $this->onShootArray[$login][self::WEAPON_ROCKET];
|
|
||||||
$laserShots = $this->onShootArray[$login][self::WEAPON_LASER];
|
|
||||||
$arrowShots = $this->onShootArray[$login][self::WEAPON_ARROW];
|
|
||||||
$nucleusShots = $this->onShootArray[$login][self::WEAPON_NUCLEUS];
|
|
||||||
|
|
||||||
if ($rocketShots > 0) {
|
|
||||||
$this->maniaControl->statisticManager->insertStat(self::STAT_ROCKET_SHOT, $player, $this->maniaControl->server->index, $rocketShots);
|
|
||||||
$this->onShootArray[$login][self::WEAPON_ROCKET] = 0;
|
|
||||||
}
|
|
||||||
if ($laserShots > 0) {
|
|
||||||
$this->maniaControl->statisticManager->insertStat(self::STAT_LASER_SHOT, $player, $this->maniaControl->server->index, $laserShots);
|
|
||||||
$this->onShootArray[$login][self::WEAPON_LASER] = 0;
|
|
||||||
}
|
|
||||||
if ($arrowShots > 0) {
|
|
||||||
$this->maniaControl->statisticManager->insertStat(self::STAT_ARROW_SHOT, $player, $this->maniaControl->server->index, $arrowShots);
|
|
||||||
$this->onShootArray[$login][self::WEAPON_ARROW] = 0;
|
|
||||||
}
|
|
||||||
if ($nucleusShots > 0) {
|
|
||||||
$this->maniaControl->statisticManager->insertStat(self::STAT_NUCLEUS_SHOT, $player, $this->maniaControl->server->index, $nucleusShots);
|
|
||||||
$this->onShootArray[$login][self::WEAPON_NUCLEUS] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->maniaControl->statisticManager->insertStat(self::STAT_ON_SHOOT, $player, $this->maniaControl->server->index, $rocketShots + $laserShots + $arrowShots + $nucleusShots);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the Weapon stat
|
|
||||||
*
|
|
||||||
* @param $weaponNumber
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private function getWeaponStat($weaponNumber, $shot = true) {
|
|
||||||
if ($shot) {
|
|
||||||
switch($weaponNumber) {
|
|
||||||
case self::WEAPON_ROCKET:
|
|
||||||
return self::STAT_ROCKET_SHOT;
|
|
||||||
case self::WEAPON_LASER:
|
|
||||||
return self::STAT_LASER_SHOT;
|
|
||||||
case self::WEAPON_ARROW:
|
|
||||||
return self::STAT_ARROW_SHOT;
|
|
||||||
case self::WEAPON_NUCLEUS:
|
|
||||||
return self::STAT_NUCLEUS_SHOT;
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch($weaponNumber) {
|
|
||||||
case self::WEAPON_ROCKET:
|
|
||||||
return self::STAT_ROCKET_HIT;
|
|
||||||
case self::WEAPON_LASER:
|
|
||||||
return self::STAT_LASER_HIT;
|
|
||||||
case self::WEAPON_ARROW:
|
|
||||||
return self::STAT_ARROW_HIT;
|
|
||||||
case self::WEAPON_NUCLEUS:
|
|
||||||
return self::STAT_NUCLEUS_HIT;
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert OnShoot Statistic when a player leaves
|
* Insert OnShoot Statistic when a player leaves
|
||||||
*
|
*
|
||||||
@ -238,7 +159,7 @@ class StatisticCollector implements CallbackListener {
|
|||||||
|
|
||||||
$callbackName = $callback[1][0];
|
$callbackName = $callback[1][0];
|
||||||
|
|
||||||
switch($callbackName) {
|
switch ($callbackName) {
|
||||||
case 'LibXmlRpc_OnShoot':
|
case 'LibXmlRpc_OnShoot':
|
||||||
$this->handleOnShoot($callback[1][1][0], $callback[1][1][1]);
|
$this->handleOnShoot($callback[1][1][0], $callback[1][1][1]);
|
||||||
break;
|
break;
|
||||||
@ -261,7 +182,7 @@ class StatisticCollector implements CallbackListener {
|
|||||||
case 'LibXmlRpc_OnCapture':
|
case 'LibXmlRpc_OnCapture':
|
||||||
$logins = $callback[1][1][0];
|
$logins = $callback[1][1][0];
|
||||||
$logins = explode(';', $logins);
|
$logins = explode(';', $logins);
|
||||||
foreach($logins as $login) {
|
foreach ($logins as $login) {
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
if (!$player) {
|
if (!$player) {
|
||||||
continue;
|
continue;
|
||||||
@ -333,11 +254,92 @@ class StatisticCollector implements CallbackListener {
|
|||||||
$paramsObject = json_decode($callback[1][1]);
|
$paramsObject = json_decode($callback[1][1]);
|
||||||
$durationTime = (int)(($paramsObject->EndTime - $paramsObject->StartTime) / 1000);
|
$durationTime = (int)(($paramsObject->EndTime - $paramsObject->StartTime) / 1000);
|
||||||
$scoresTable = $paramsObject->ScoresTable;
|
$scoresTable = $paramsObject->ScoresTable;
|
||||||
foreach($scoresTable as $score) {
|
foreach ($scoresTable as $score) {
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($score->Login);
|
$player = $this->maniaControl->playerManager->getPlayer($score->Login);
|
||||||
$this->maniaControl->statisticManager->insertStat(self::STAT_PLAYTIME, $player, -1, $durationTime);
|
$this->maniaControl->statisticManager->insertStat(self::STAT_PLAYTIME, $player, -1, $durationTime);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle Player Shots
|
||||||
|
*
|
||||||
|
* @param string $login
|
||||||
|
* @param int $weaponNumber
|
||||||
|
*/
|
||||||
|
private function handleOnShoot($login, $weaponNumber) {
|
||||||
|
if (!isset($this->onShootArray[$login])) {
|
||||||
|
$this->onShootArray[$login] = array(self::WEAPON_ROCKET => 0, self::WEAPON_ARROW => 0, self::WEAPON_NUCLEUS => 0, self::WEAPON_LASER => 0);
|
||||||
|
$this->onShootArray[$login][$weaponNumber]++;
|
||||||
|
} else {
|
||||||
|
$this->onShootArray[$login][$weaponNumber]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Write Shoot Data into database
|
||||||
|
if (array_sum($this->onShootArray[$login]) > $this->maniaControl->settingManager->getSetting($this, self::SETTING_ON_SHOOT_PRESTORE)) {
|
||||||
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
|
|
||||||
|
$rocketShots = $this->onShootArray[$login][self::WEAPON_ROCKET];
|
||||||
|
$laserShots = $this->onShootArray[$login][self::WEAPON_LASER];
|
||||||
|
$arrowShots = $this->onShootArray[$login][self::WEAPON_ARROW];
|
||||||
|
$nucleusShots = $this->onShootArray[$login][self::WEAPON_NUCLEUS];
|
||||||
|
|
||||||
|
if ($rocketShots > 0) {
|
||||||
|
$this->maniaControl->statisticManager->insertStat(self::STAT_ROCKET_SHOT, $player, $this->maniaControl->server->index, $rocketShots);
|
||||||
|
$this->onShootArray[$login][self::WEAPON_ROCKET] = 0;
|
||||||
|
}
|
||||||
|
if ($laserShots > 0) {
|
||||||
|
$this->maniaControl->statisticManager->insertStat(self::STAT_LASER_SHOT, $player, $this->maniaControl->server->index, $laserShots);
|
||||||
|
$this->onShootArray[$login][self::WEAPON_LASER] = 0;
|
||||||
|
}
|
||||||
|
if ($arrowShots > 0) {
|
||||||
|
$this->maniaControl->statisticManager->insertStat(self::STAT_ARROW_SHOT, $player, $this->maniaControl->server->index, $arrowShots);
|
||||||
|
$this->onShootArray[$login][self::WEAPON_ARROW] = 0;
|
||||||
|
}
|
||||||
|
if ($nucleusShots > 0) {
|
||||||
|
$this->maniaControl->statisticManager->insertStat(self::STAT_NUCLEUS_SHOT, $player, $this->maniaControl->server->index, $nucleusShots);
|
||||||
|
$this->onShootArray[$login][self::WEAPON_NUCLEUS] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->maniaControl->statisticManager->insertStat(self::STAT_ON_SHOOT, $player, $this->maniaControl->server->index, $rocketShots + $laserShots + $arrowShots + $nucleusShots);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Weapon stat
|
||||||
|
*
|
||||||
|
* @param int $weaponNumber
|
||||||
|
* @param bool $shot
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getWeaponStat($weaponNumber, $shot = true) {
|
||||||
|
if ($shot) {
|
||||||
|
switch ($weaponNumber) {
|
||||||
|
case self::WEAPON_ROCKET:
|
||||||
|
return self::STAT_ROCKET_SHOT;
|
||||||
|
case self::WEAPON_LASER:
|
||||||
|
return self::STAT_LASER_SHOT;
|
||||||
|
case self::WEAPON_ARROW:
|
||||||
|
return self::STAT_ARROW_SHOT;
|
||||||
|
case self::WEAPON_NUCLEUS:
|
||||||
|
return self::STAT_NUCLEUS_SHOT;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch ($weaponNumber) {
|
||||||
|
case self::WEAPON_ROCKET:
|
||||||
|
return self::STAT_ROCKET_HIT;
|
||||||
|
case self::WEAPON_LASER:
|
||||||
|
return self::STAT_LASER_HIT;
|
||||||
|
case self::WEAPON_ARROW:
|
||||||
|
return self::STAT_ARROW_HIT;
|
||||||
|
case self::WEAPON_NUCLEUS:
|
||||||
|
return self::STAT_NUCLEUS_HIT;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -8,8 +8,8 @@ use ManiaControl\Players\Player;
|
|||||||
/**
|
/**
|
||||||
* Statistic Manager Class
|
* Statistic Manager Class
|
||||||
*
|
*
|
||||||
* @author steeffeen & kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class StatisticManager {
|
class StatisticManager {
|
||||||
@ -59,229 +59,55 @@ class StatisticManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the value of an statistic
|
* Initialize necessary database tables
|
||||||
*
|
*
|
||||||
* @param $statName
|
* @return bool
|
||||||
* @param $playerId
|
|
||||||
* @param int $serverIndex
|
|
||||||
* @return int
|
|
||||||
*/
|
*/
|
||||||
public function getStatisticData($statName, $playerId, $serverIndex = -1) {
|
private function initTables() {
|
||||||
//Handle Special Stats
|
|
||||||
switch($statName) {
|
|
||||||
case self::SPECIAL_STAT_KD_RATIO:
|
|
||||||
$kills = $this->getStatisticData(StatisticCollector::STAT_ON_KILL, $playerId, $serverIndex);
|
|
||||||
$deaths = $this->getStatisticData(StatisticCollector::STAT_ON_DEATH, $playerId, $serverIndex);
|
|
||||||
if ($deaths == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return intval($kills) / intval($deaths);
|
|
||||||
case self::SPECIAL_STAT_HITS_PH:
|
|
||||||
$hits = $this->getStatisticData(StatisticCollector::STAT_ON_HIT, $playerId, $serverIndex);
|
|
||||||
$time = $this->getStatisticData(StatisticCollector::STAT_PLAYTIME, $playerId, $serverIndex);
|
|
||||||
if ($time == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return intval($hits) / (intval($time) / 3600);
|
|
||||||
case self::SPECIAL_STAT_ARROW_ACC:
|
|
||||||
$hits = $this->getStatisticData(StatisticCollector::STAT_ARROW_HIT, $playerId, $serverIndex);
|
|
||||||
$shots = $this->getStatisticData(StatisticCollector::STAT_ARROW_SHOT, $playerId, $serverIndex);
|
|
||||||
if ($shots == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return intval($hits) / intval($shots);
|
|
||||||
case self::SPECIAL_STAT_LASER_ACC:
|
|
||||||
$hits = $this->getStatisticData(StatisticCollector::STAT_LASER_HIT, $playerId, $serverIndex);
|
|
||||||
$shots = $this->getStatisticData(StatisticCollector::STAT_LASER_SHOT, $playerId, $serverIndex);
|
|
||||||
if ($shots == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return intval($hits) / intval($shots);
|
|
||||||
case self::SPECIAL_STAT_NUCLEUS_ACC:
|
|
||||||
$hits = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_HIT, $playerId, $serverIndex);
|
|
||||||
$shots = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_SHOT, $playerId, $serverIndex);
|
|
||||||
if ($shots == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return intval($hits) / intval($shots);
|
|
||||||
case self::SPECIAL_STAT_ROCKET_ACC:
|
|
||||||
$hits = $this->getStatisticData(StatisticCollector::STAT_ROCKET_HIT, $playerId, $serverIndex);
|
|
||||||
$shots = $this->getStatisticData(StatisticCollector::STAT_ROCKET_SHOT, $playerId, $serverIndex);
|
|
||||||
if ($shots == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return intval($hits) / intval($shots);
|
|
||||||
}
|
|
||||||
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
$statId = $this->getStatId($statName);
|
$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATMETADATA . "` (
|
||||||
|
`index` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(100) NOT NULL,
|
||||||
|
`type` int(5) NOT NULL,
|
||||||
|
`description` varchar(150) NOT NULL,
|
||||||
|
PRIMARY KEY (`index`),
|
||||||
|
UNIQUE KEY `name` (`name`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Statistics Meta Data' AUTO_INCREMENT=1;";
|
||||||
|
$statement = $mysqli->prepare($query);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error, E_USER_ERROR);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$statement->execute();
|
||||||
|
if ($statement->error) {
|
||||||
|
trigger_error($statement->error, E_USER_ERROR);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$statement->close();
|
||||||
|
|
||||||
if (!$statId) return -1;
|
$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATISTICS . "` (
|
||||||
|
`index` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
if ($serverIndex == -1) {
|
`serverIndex` int(11) NOT NULL,
|
||||||
$query = "SELECT SUM(value) as value FROM `" . self::TABLE_STATISTICS . "` WHERE `statId` = " . $statId . " AND `playerId` = " . $playerId . ";";
|
`playerId` int(11) NOT NULL,
|
||||||
} else {
|
`statId` int(11) NOT NULL,
|
||||||
$query = "SELECT value FROM `" . self::TABLE_STATISTICS . "` WHERE `statId` = " . $statId . " AND `playerId` = " . $playerId . " AND `serverIndex` = '" . $serverIndex . "';";
|
`value` int(20) NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`index`),
|
||||||
|
UNIQUE KEY `unique` (`statId`,`playerId`,`serverIndex`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Statistics' AUTO_INCREMENT=1;";
|
||||||
|
$statement = $mysqli->prepare($query);
|
||||||
|
if ($mysqli->error) {
|
||||||
|
trigger_error($mysqli->error, E_USER_ERROR);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
$statement->execute();
|
||||||
$result = $mysqli->query($query);
|
if ($statement->error) {
|
||||||
if (!$result) {
|
trigger_error($statement->error, E_USER_ERROR);
|
||||||
trigger_error($mysqli->error);
|
return false;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
$statement->close();
|
||||||
$row = $result->fetch_object();
|
return true;
|
||||||
|
|
||||||
$result->close();
|
|
||||||
return $row->value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get All statistics ordered by an given name
|
|
||||||
*
|
|
||||||
* @param string $statName
|
|
||||||
* @param $serverIndex
|
|
||||||
* @param $minValue
|
|
||||||
* @internal param $orderedBy
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getStatsRanking($statName = '', $serverIndex = -1, $minValue = -1) {
|
|
||||||
if (isset($this->specialStats[$statName])) {
|
|
||||||
return $this->getStatsRankingOfSpecialStat($statName, $serverIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
$statId = $this->getStatId($statName);
|
|
||||||
|
|
||||||
if ($minValue == -1) {
|
|
||||||
$query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " ORDER BY value DESC;";
|
|
||||||
} else {
|
|
||||||
$query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " AND value >= " . $minValue . " ORDER BY value DESC;";
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = $mysqli->query($query);
|
|
||||||
if (!$result) {
|
|
||||||
trigger_error($mysqli->error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$stats = array();
|
|
||||||
while($row = $result->fetch_object()) {
|
|
||||||
if ($serverIndex == -1) {
|
|
||||||
if (!isset($stats[$row->playerId])) {
|
|
||||||
$stats[$row->playerId] = $row->value;
|
|
||||||
} else {
|
|
||||||
$stats[$row->playerId] += $row->value;
|
|
||||||
}
|
|
||||||
} else if ($serverIndex == $row->serverIndex) {
|
|
||||||
$stats[$row->playerId] = $row->value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
arsort($stats);
|
|
||||||
$result->close();
|
|
||||||
return $stats;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets The Ranking of an Special Stat
|
|
||||||
*
|
|
||||||
* @param string $statName
|
|
||||||
* @param $serverIndex
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getStatsRankingOfSpecialStat($statName = '', $serverIndex = -1) {
|
|
||||||
$statsArray = array();
|
|
||||||
switch($statName) {
|
|
||||||
case self::SPECIAL_STAT_KD_RATIO:
|
|
||||||
$kills = $this->getStatsRanking(StatisticCollector::STAT_ON_KILL, $serverIndex);
|
|
||||||
$deaths = $this->getStatsRanking(StatisticCollector::STAT_ON_DEATH, $serverIndex);
|
|
||||||
if(!$kills || !$deaths){
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
foreach($deaths as $key => $death) {
|
|
||||||
if ($death == 0 || !isset($kills[$key])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$statsArray[$key] = intval($kills[$key]) / intval($death);
|
|
||||||
}
|
|
||||||
arsort($statsArray);
|
|
||||||
break;
|
|
||||||
case self::SPECIAL_STAT_HITS_PH:
|
|
||||||
$hits = $this->getStatsRanking(StatisticCollector::STAT_ON_HIT, $serverIndex);
|
|
||||||
$times = $this->getStatsRanking(StatisticCollector::STAT_PLAYTIME, $serverIndex);
|
|
||||||
if(!$hits || !$times){
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
foreach($times as $key => $time) {
|
|
||||||
if ($time == 0 || !isset($hits[$key])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$statsArray[$key] = intval($hits[$key]) / (intval($time) / 3600);
|
|
||||||
}
|
|
||||||
arsort($statsArray);
|
|
||||||
break;
|
|
||||||
case self::SPECIAL_STAT_ARROW_ACC:
|
|
||||||
$hits = $this->getStatsRanking(StatisticCollector::STAT_ARROW_HIT, $serverIndex);
|
|
||||||
$shots = $this->getStatsRanking(StatisticCollector::STAT_ARROW_SHOT, $serverIndex);
|
|
||||||
if(!$hits || !$shots){
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
foreach($shots as $key => $shot) {
|
|
||||||
if ($shot == 0 || !isset($hits[$key])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$statsArray[$key] = intval($hits[$key]) / (intval($shot));
|
|
||||||
}
|
|
||||||
arsort($statsArray);
|
|
||||||
break;
|
|
||||||
case self::SPECIAL_STAT_LASER_ACC:
|
|
||||||
$hits = $this->getStatsRanking(StatisticCollector::STAT_LASER_HIT, $serverIndex);
|
|
||||||
$shots = $this->getStatsRanking(StatisticCollector::STAT_LASER_SHOT, $serverIndex);
|
|
||||||
if(!$hits || !$shots){
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
foreach($shots as $key => $shot) {
|
|
||||||
if ($shot == 0 || !isset($hits[$key])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$statsArray[$key] = intval($hits[$key]) / (intval($shot));
|
|
||||||
}
|
|
||||||
arsort($statsArray);
|
|
||||||
break;
|
|
||||||
case self::SPECIAL_STAT_ROCKET_ACC:
|
|
||||||
$hits = $this->getStatsRanking(StatisticCollector::STAT_ROCKET_HIT, $serverIndex);
|
|
||||||
$shots = $this->getStatsRanking(StatisticCollector::STAT_ROCKET_SHOT, $serverIndex);
|
|
||||||
if(!$hits || !$shots){
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
foreach($shots as $key => $shot) {
|
|
||||||
if ($shot == 0 || !isset($hits[$key])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$statsArray[$key] = intval($hits[$key]) / (intval($shot));
|
|
||||||
}
|
|
||||||
arsort($statsArray);
|
|
||||||
break;
|
|
||||||
case self::SPECIAL_STAT_NUCLEUS_ACC:
|
|
||||||
$hits = $this->getStatsRanking(StatisticCollector::STAT_NUCLEUS_HIT, $serverIndex);
|
|
||||||
$shots = $this->getStatsRanking(StatisticCollector::STAT_NUCLEUS_SHOT, $serverIndex);
|
|
||||||
if(!$hits || !$shots){
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
foreach($shots as $key => $shot) {
|
|
||||||
if ($shot == 0 || !isset($hits[$key])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$statsArray[$key] = intval($hits[$key]) / (intval($shot));
|
|
||||||
}
|
|
||||||
arsort($statsArray);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return $statsArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store Stats Meta Data from the Database
|
* Store Stats Meta Data from the Database
|
||||||
*/
|
*/
|
||||||
@ -295,7 +121,7 @@ class StatisticManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
while($row = $result->fetch_object()) {
|
while ($row = $result->fetch_object()) {
|
||||||
$this->stats[$row->name] = $row;
|
$this->stats[$row->name] = $row;
|
||||||
}
|
}
|
||||||
$result->close();
|
$result->close();
|
||||||
@ -339,6 +165,151 @@ class StatisticManager {
|
|||||||
$this->specialStats[self::SPECIAL_STAT_ROCKET_ACC] = $stat;
|
$this->specialStats[self::SPECIAL_STAT_ROCKET_ACC] = $stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get All statistics ordered by an given name
|
||||||
|
*
|
||||||
|
* @param string $statName
|
||||||
|
* @param $serverIndex
|
||||||
|
* @param $minValue
|
||||||
|
* @internal param $orderedBy
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getStatsRanking($statName = '', $serverIndex = -1, $minValue = -1) {
|
||||||
|
if (isset($this->specialStats[$statName])) {
|
||||||
|
return $this->getStatsRankingOfSpecialStat($statName, $serverIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
$statId = $this->getStatId($statName);
|
||||||
|
|
||||||
|
if ($minValue == -1) {
|
||||||
|
$query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " ORDER BY value DESC;";
|
||||||
|
} else {
|
||||||
|
$query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " AND value >= " . $minValue . " ORDER BY value DESC;";
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $mysqli->query($query);
|
||||||
|
if (!$result) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$stats = array();
|
||||||
|
while ($row = $result->fetch_object()) {
|
||||||
|
if ($serverIndex == -1) {
|
||||||
|
if (!isset($stats[$row->playerId])) {
|
||||||
|
$stats[$row->playerId] = $row->value;
|
||||||
|
} else {
|
||||||
|
$stats[$row->playerId] += $row->value;
|
||||||
|
}
|
||||||
|
} else if ($serverIndex == $row->serverIndex) {
|
||||||
|
$stats[$row->playerId] = $row->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
arsort($stats);
|
||||||
|
$result->close();
|
||||||
|
return $stats;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets The Ranking of an Special Stat
|
||||||
|
*
|
||||||
|
* @param string $statName
|
||||||
|
* @param $serverIndex
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getStatsRankingOfSpecialStat($statName = '', $serverIndex = -1) {
|
||||||
|
$statsArray = array();
|
||||||
|
switch ($statName) {
|
||||||
|
case self::SPECIAL_STAT_KD_RATIO:
|
||||||
|
$kills = $this->getStatsRanking(StatisticCollector::STAT_ON_KILL, $serverIndex);
|
||||||
|
$deaths = $this->getStatsRanking(StatisticCollector::STAT_ON_DEATH, $serverIndex);
|
||||||
|
if (!$kills || !$deaths) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
foreach ($deaths as $key => $death) {
|
||||||
|
if ($death == 0 || !isset($kills[$key])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$statsArray[$key] = intval($kills[$key]) / intval($death);
|
||||||
|
}
|
||||||
|
arsort($statsArray);
|
||||||
|
break;
|
||||||
|
case self::SPECIAL_STAT_HITS_PH:
|
||||||
|
$hits = $this->getStatsRanking(StatisticCollector::STAT_ON_HIT, $serverIndex);
|
||||||
|
$times = $this->getStatsRanking(StatisticCollector::STAT_PLAYTIME, $serverIndex);
|
||||||
|
if (!$hits || !$times) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
foreach ($times as $key => $time) {
|
||||||
|
if ($time == 0 || !isset($hits[$key])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$statsArray[$key] = intval($hits[$key]) / (intval($time) / 3600);
|
||||||
|
}
|
||||||
|
arsort($statsArray);
|
||||||
|
break;
|
||||||
|
case self::SPECIAL_STAT_ARROW_ACC:
|
||||||
|
$hits = $this->getStatsRanking(StatisticCollector::STAT_ARROW_HIT, $serverIndex);
|
||||||
|
$shots = $this->getStatsRanking(StatisticCollector::STAT_ARROW_SHOT, $serverIndex);
|
||||||
|
if (!$hits || !$shots) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
foreach ($shots as $key => $shot) {
|
||||||
|
if ($shot == 0 || !isset($hits[$key])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$statsArray[$key] = intval($hits[$key]) / (intval($shot));
|
||||||
|
}
|
||||||
|
arsort($statsArray);
|
||||||
|
break;
|
||||||
|
case self::SPECIAL_STAT_LASER_ACC:
|
||||||
|
$hits = $this->getStatsRanking(StatisticCollector::STAT_LASER_HIT, $serverIndex);
|
||||||
|
$shots = $this->getStatsRanking(StatisticCollector::STAT_LASER_SHOT, $serverIndex);
|
||||||
|
if (!$hits || !$shots) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
foreach ($shots as $key => $shot) {
|
||||||
|
if ($shot == 0 || !isset($hits[$key])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$statsArray[$key] = intval($hits[$key]) / (intval($shot));
|
||||||
|
}
|
||||||
|
arsort($statsArray);
|
||||||
|
break;
|
||||||
|
case self::SPECIAL_STAT_ROCKET_ACC:
|
||||||
|
$hits = $this->getStatsRanking(StatisticCollector::STAT_ROCKET_HIT, $serverIndex);
|
||||||
|
$shots = $this->getStatsRanking(StatisticCollector::STAT_ROCKET_SHOT, $serverIndex);
|
||||||
|
if (!$hits || !$shots) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
foreach ($shots as $key => $shot) {
|
||||||
|
if ($shot == 0 || !isset($hits[$key])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$statsArray[$key] = intval($hits[$key]) / (intval($shot));
|
||||||
|
}
|
||||||
|
arsort($statsArray);
|
||||||
|
break;
|
||||||
|
case self::SPECIAL_STAT_NUCLEUS_ACC:
|
||||||
|
$hits = $this->getStatsRanking(StatisticCollector::STAT_NUCLEUS_HIT, $serverIndex);
|
||||||
|
$shots = $this->getStatsRanking(StatisticCollector::STAT_NUCLEUS_SHOT, $serverIndex);
|
||||||
|
if (!$hits || !$shots) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
foreach ($shots as $key => $shot) {
|
||||||
|
if ($shot == 0 || !isset($hits[$key])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$statsArray[$key] = intval($hits[$key]) / (intval($shot));
|
||||||
|
}
|
||||||
|
arsort($statsArray);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return $statsArray;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the Stat Id
|
* Return the Stat Id
|
||||||
*
|
*
|
||||||
@ -363,13 +334,13 @@ class StatisticManager {
|
|||||||
public function getAllPlayerStats(Player $player, $serverIndex = -1) {
|
public function getAllPlayerStats(Player $player, $serverIndex = -1) {
|
||||||
// TODO improve performance of the foreach
|
// TODO improve performance of the foreach
|
||||||
$playerStats = array();
|
$playerStats = array();
|
||||||
foreach($this->stats as $stat) {
|
foreach ($this->stats as $stat) {
|
||||||
$value = $this->getStatisticData($stat->name, $player->index, $serverIndex);
|
$value = $this->getStatisticData($stat->name, $player->index, $serverIndex);
|
||||||
$playerStats[$stat->name] = array($stat, $value);
|
$playerStats[$stat->name] = array($stat, $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($this->specialStats as $stat) {
|
foreach ($this->specialStats as $stat) {
|
||||||
switch($stat->name) {
|
switch ($stat->name) {
|
||||||
case self::SPECIAL_STAT_KD_RATIO:
|
case self::SPECIAL_STAT_KD_RATIO:
|
||||||
if (!isset($playerStats[StatisticCollector::STAT_ON_KILL]) || !isset($playerStats[StatisticCollector::STAT_ON_DEATH])) {
|
if (!isset($playerStats[StatisticCollector::STAT_ON_KILL]) || !isset($playerStats[StatisticCollector::STAT_ON_DEATH])) {
|
||||||
continue;
|
continue;
|
||||||
@ -441,6 +412,98 @@ class StatisticManager {
|
|||||||
return $playerStats;
|
return $playerStats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the value of an statistic
|
||||||
|
*
|
||||||
|
* @param $statName
|
||||||
|
* @param $playerId
|
||||||
|
* @param int $serverIndex
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getStatisticData($statName, $playerId, $serverIndex = -1) {
|
||||||
|
//Handle Special Stats
|
||||||
|
switch ($statName) {
|
||||||
|
case self::SPECIAL_STAT_KD_RATIO:
|
||||||
|
$kills = $this->getStatisticData(StatisticCollector::STAT_ON_KILL, $playerId, $serverIndex);
|
||||||
|
$deaths = $this->getStatisticData(StatisticCollector::STAT_ON_DEATH, $playerId, $serverIndex);
|
||||||
|
if ($deaths == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return intval($kills) / intval($deaths);
|
||||||
|
case self::SPECIAL_STAT_HITS_PH:
|
||||||
|
$hits = $this->getStatisticData(StatisticCollector::STAT_ON_HIT, $playerId, $serverIndex);
|
||||||
|
$time = $this->getStatisticData(StatisticCollector::STAT_PLAYTIME, $playerId, $serverIndex);
|
||||||
|
if ($time == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return intval($hits) / (intval($time) / 3600);
|
||||||
|
case self::SPECIAL_STAT_ARROW_ACC:
|
||||||
|
$hits = $this->getStatisticData(StatisticCollector::STAT_ARROW_HIT, $playerId, $serverIndex);
|
||||||
|
$shots = $this->getStatisticData(StatisticCollector::STAT_ARROW_SHOT, $playerId, $serverIndex);
|
||||||
|
if ($shots == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return intval($hits) / intval($shots);
|
||||||
|
case self::SPECIAL_STAT_LASER_ACC:
|
||||||
|
$hits = $this->getStatisticData(StatisticCollector::STAT_LASER_HIT, $playerId, $serverIndex);
|
||||||
|
$shots = $this->getStatisticData(StatisticCollector::STAT_LASER_SHOT, $playerId, $serverIndex);
|
||||||
|
if ($shots == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return intval($hits) / intval($shots);
|
||||||
|
case self::SPECIAL_STAT_NUCLEUS_ACC:
|
||||||
|
$hits = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_HIT, $playerId, $serverIndex);
|
||||||
|
$shots = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_SHOT, $playerId, $serverIndex);
|
||||||
|
if ($shots == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return intval($hits) / intval($shots);
|
||||||
|
case self::SPECIAL_STAT_ROCKET_ACC:
|
||||||
|
$hits = $this->getStatisticData(StatisticCollector::STAT_ROCKET_HIT, $playerId, $serverIndex);
|
||||||
|
$shots = $this->getStatisticData(StatisticCollector::STAT_ROCKET_SHOT, $playerId, $serverIndex);
|
||||||
|
if ($shots == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return intval($hits) / intval($shots);
|
||||||
|
}
|
||||||
|
|
||||||
|
$mysqli = $this->maniaControl->database->mysqli;
|
||||||
|
$statId = $this->getStatId($statName);
|
||||||
|
|
||||||
|
if (!$statId) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($serverIndex == -1) {
|
||||||
|
$query = "SELECT SUM(value) as value FROM `" . self::TABLE_STATISTICS . "` WHERE `statId` = " . $statId . " AND `playerId` = " . $playerId . ";";
|
||||||
|
} else {
|
||||||
|
$query = "SELECT value FROM `" . self::TABLE_STATISTICS . "` WHERE `statId` = " . $statId . " AND `playerId` = " . $playerId . " AND `serverIndex` = '" . $serverIndex . "';";
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $mysqli->query($query);
|
||||||
|
if (!$result) {
|
||||||
|
trigger_error($mysqli->error);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$row = $result->fetch_object();
|
||||||
|
|
||||||
|
$result->close();
|
||||||
|
return $row->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Increments a Statistic by one
|
||||||
|
*
|
||||||
|
* @param string $statName
|
||||||
|
* @param Player $player
|
||||||
|
* @param int $serverIndex
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function incrementStat($statName, Player $player, $serverIndex = -1) {
|
||||||
|
return $this->insertStat($statName, $player, $serverIndex, 1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inserts a Stat into the database
|
* Inserts a Stat into the database
|
||||||
*
|
*
|
||||||
@ -496,18 +559,6 @@ class StatisticManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Increments a Statistic by one
|
|
||||||
*
|
|
||||||
* @param string $statName
|
|
||||||
* @param Player $player
|
|
||||||
* @param int $serverIndex
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function incrementStat($statName, Player $player, $serverIndex = -1) {
|
|
||||||
return $this->insertStat($statName, $player, $serverIndex, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines a Stat
|
* Defines a Stat
|
||||||
*
|
*
|
||||||
@ -542,54 +593,4 @@ class StatisticManager {
|
|||||||
$statement->close();
|
$statement->close();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize necessary database tables
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function initTables() {
|
|
||||||
$mysqli = $this->maniaControl->database->mysqli;
|
|
||||||
$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATMETADATA . "` (
|
|
||||||
`index` int(11) NOT NULL AUTO_INCREMENT,
|
|
||||||
`name` varchar(100) NOT NULL,
|
|
||||||
`type` int(5) NOT NULL,
|
|
||||||
`description` varchar(150) NOT NULL,
|
|
||||||
PRIMARY KEY (`index`),
|
|
||||||
UNIQUE KEY `name` (`name`)
|
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Statistics Meta Data' AUTO_INCREMENT=1;";
|
|
||||||
$statement = $mysqli->prepare($query);
|
|
||||||
if ($mysqli->error) {
|
|
||||||
trigger_error($mysqli->error, E_USER_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$statement->execute();
|
|
||||||
if ($statement->error) {
|
|
||||||
trigger_error($statement->error, E_USER_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$statement->close();
|
|
||||||
|
|
||||||
$query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATISTICS . "` (
|
|
||||||
`index` int(11) NOT NULL AUTO_INCREMENT,
|
|
||||||
`serverIndex` int(11) NOT NULL,
|
|
||||||
`playerId` int(11) NOT NULL,
|
|
||||||
`statId` int(11) NOT NULL,
|
|
||||||
`value` int(20) NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`index`),
|
|
||||||
UNIQUE KEY `unique` (`statId`,`playerId`,`serverIndex`)
|
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Statistics' AUTO_INCREMENT=1;";
|
|
||||||
$statement = $mysqli->prepare($query);
|
|
||||||
if ($mysqli->error) {
|
|
||||||
trigger_error($mysqli->error, E_USER_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$statement->execute();
|
|
||||||
if ($statement->error) {
|
|
||||||
trigger_error($statement->error, E_USER_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$statement->close();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl\Update;
|
|||||||
/**
|
/**
|
||||||
* Plugin Update Data Structure
|
* Plugin Update Data Structure
|
||||||
*
|
*
|
||||||
* @author ManiaControl Team
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PluginUpdateData {
|
class PluginUpdateData {
|
||||||
@ -41,7 +41,7 @@ class PluginUpdateData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the Plugin Update Data is newer than the given Plugin Versin
|
* Check if the Plugin Update Data is newer than the given Plugin Version
|
||||||
*
|
*
|
||||||
* @param float $version
|
* @param float $version
|
||||||
* @return bool
|
* @return bool
|
||||||
|
@ -6,20 +6,20 @@ use ManiaControl\Callbacks\CallbackListener;
|
|||||||
use ManiaControl\Callbacks\CallbackManager;
|
use ManiaControl\Callbacks\CallbackManager;
|
||||||
use ManiaControl\Callbacks\TimerListener;
|
use ManiaControl\Callbacks\TimerListener;
|
||||||
use ManiaControl\Commands\CommandListener;
|
use ManiaControl\Commands\CommandListener;
|
||||||
|
use ManiaControl\Files\BackupUtil;
|
||||||
use ManiaControl\Files\FileUtil;
|
use ManiaControl\Files\FileUtil;
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
use ManiaControl\Players\Player;
|
use ManiaControl\Players\Player;
|
||||||
use ManiaControl\Plugins\Plugin;
|
use ManiaControl\Plugins\Plugin;
|
||||||
use ManiaControl\Plugins\PluginInstallMenu;
|
use ManiaControl\Plugins\PluginInstallMenu;
|
||||||
use ManiaControl\Plugins\PluginMenu;
|
|
||||||
use ManiaControl\Plugins\PluginManager;
|
use ManiaControl\Plugins\PluginManager;
|
||||||
use ManiaControl\Files\BackupUtil;
|
use ManiaControl\Plugins\PluginMenu;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manager checking for ManiaControl Plugin Updates
|
* Manager checking for ManiaControl Plugin Updates
|
||||||
*
|
*
|
||||||
* @author ManiaControl Team
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class PluginUpdateManager implements CallbackListener, CommandListener, TimerListener {
|
class PluginUpdateManager implements CallbackListener, CommandListener, TimerListener {
|
||||||
@ -59,76 +59,6 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
$this->checkPluginsUpdate($player);
|
$this->checkPluginsUpdate($player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle //pluginsupdate command
|
|
||||||
*
|
|
||||||
* @param array $chatCallback
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function handle_PluginsUpdate(array $chatCallback, Player $player) {
|
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, UpdateManager::SETTING_PERMISSION_UPDATE)) {
|
|
||||||
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->performPluginsUpdate($player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle PlayerManialinkPageAnswer callback
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
|
||||||
public function handleManialinkPageAnswer(array $callback) {
|
|
||||||
$actionId = $callback[1][2];
|
|
||||||
$update = (strpos($actionId, PluginMenu::ACTION_PREFIX_UPDATEPLUGIN) === 0);
|
|
||||||
$install = (strpos($actionId, PluginInstallMenu::ACTION_PREFIX_INSTALLPLUGIN) === 0);
|
|
||||||
if (!$update && !$install) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$login = $callback[1][1];
|
|
||||||
$player = $this->maniaControl->playerManager->getPlayer($login);
|
|
||||||
|
|
||||||
if ($update) {
|
|
||||||
$pluginClass = substr($actionId, strlen(PluginMenu::ACTION_PREFIX_UPDATEPLUGIN));
|
|
||||||
if ($pluginClass == 'All') {
|
|
||||||
$this->performPluginsUpdate($player);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$pluginUpdateData = $this->getPluginUpdate($pluginClass);
|
|
||||||
if ($pluginUpdateData) {
|
|
||||||
$this->installPlugin($pluginUpdateData, $player, true);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$message = 'Error loading Plugin Update Data!';
|
|
||||||
$this->maniaControl->chat->sendError($message, $player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$pluginId = substr($actionId, strlen(PluginInstallMenu::ACTION_PREFIX_INSTALLPLUGIN));
|
|
||||||
|
|
||||||
$url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
|
|
||||||
$self = $this;
|
|
||||||
$this->maniaControl->fileReader->loadFile($url, function ($data, $error) use(&$self, &$player) {
|
|
||||||
if ($error || !$data) {
|
|
||||||
$message = "Error loading Plugin Install Data! {$error}";
|
|
||||||
$self->maniaControl->chat->sendError($message, $player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$data = json_decode($data);
|
|
||||||
if (!isset($data[0])) {
|
|
||||||
$message = "Error loading Plugin Install Data! {$error}";
|
|
||||||
$self->maniaControl->chat->sendError($message, $player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$pluginUpdateData = new PluginUpdateData($data[0]);
|
|
||||||
$self->installPlugin($pluginUpdateData, $player);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if there are Outdated Plugins installed
|
* Check if there are Outdated Plugins installed
|
||||||
*
|
*
|
||||||
@ -142,7 +72,7 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
$this->maniaControl->log($message);
|
$this->maniaControl->log($message);
|
||||||
|
|
||||||
$self = $this;
|
$self = $this;
|
||||||
$this->maniaControl->pluginManager->fetchPluginList(function ($data, $error) use(&$self, &$player) {
|
$this->maniaControl->pluginManager->fetchPluginList(function ($data, $error) use (&$self, &$player) {
|
||||||
|
|
||||||
if (!$data || $error) {
|
if (!$data || $error) {
|
||||||
$message = 'Error while checking Plugins for newer Versions!';
|
$message = 'Error while checking Plugins for newer Versions!';
|
||||||
@ -159,7 +89,6 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
|
|
||||||
foreach ($pluginClasses as $pluginClass) {
|
foreach ($pluginClasses as $pluginClass) {
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var Plugin $pluginClass
|
* @var Plugin $pluginClass
|
||||||
*/
|
*/
|
||||||
$pluginId = $pluginClass::getId();
|
$pluginId = $pluginClass::getId();
|
||||||
@ -185,8 +114,7 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
$self->maniaControl->chat->sendSuccess($message, $player);
|
$self->maniaControl->chat->sendSuccess($message, $player);
|
||||||
}
|
}
|
||||||
$self->maniaControl->log($message);
|
$self->maniaControl->log($message);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$updatesCount = count($pluginUpdates);
|
$updatesCount = count($pluginUpdates);
|
||||||
$message = "Plugins Update Check completed: There are {$updatesCount} Updates available!";
|
$message = "Plugins Update Check completed: There are {$updatesCount} Updates available!";
|
||||||
if ($player) {
|
if ($player) {
|
||||||
@ -197,6 +125,39 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an Array of Plugin Update Data from the given Web Service Result
|
||||||
|
*
|
||||||
|
* @param mixed $webServiceResult
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function parsePluginsData($webServiceResult) {
|
||||||
|
if (!$webServiceResult || !is_array($webServiceResult)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$pluginsData = array();
|
||||||
|
foreach ($webServiceResult as $pluginResult) {
|
||||||
|
$pluginData = new PluginUpdateData($pluginResult);
|
||||||
|
$pluginsData[$pluginData->pluginId] = $pluginData;
|
||||||
|
}
|
||||||
|
return $pluginsData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle //pluginsupdate command
|
||||||
|
*
|
||||||
|
* @param array $chatCallback
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function handle_PluginsUpdate(array $chatCallback, Player $player) {
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, UpdateManager::SETTING_PERMISSION_UPDATE)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->performPluginsUpdate($player);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform an Update of all outdated Plugins
|
* Perform an Update of all outdated Plugins
|
||||||
*
|
*
|
||||||
@ -233,51 +194,6 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check given Plugin Class for Update
|
|
||||||
*
|
|
||||||
* @param string $pluginClass
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function getPluginUpdate($pluginClass) {
|
|
||||||
$pluginClass = PluginManager::getPluginClass($pluginClass);
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @var Plugin $pluginClass
|
|
||||||
*/
|
|
||||||
$pluginId = $pluginClass::getId();
|
|
||||||
$url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
|
|
||||||
$dataJson = FileUtil::loadFile($url);
|
|
||||||
$pluginVersions = json_decode($dataJson);
|
|
||||||
if (!$pluginVersions || !isset($pluginVersions[0])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$pluginUpdateData = new PluginUpdateData($pluginVersions[0]);
|
|
||||||
$pluginVersion = $pluginClass::getVersion();
|
|
||||||
if ($pluginUpdateData->isNewerThan($pluginVersion)) {
|
|
||||||
return $pluginUpdateData;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get an Array of Plugin Update Data from the given Web Service Result
|
|
||||||
*
|
|
||||||
* @param mixed $webServiceResult
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function parsePluginsData($webServiceResult) {
|
|
||||||
if (!$webServiceResult || !is_array($webServiceResult)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$pluginsData = array();
|
|
||||||
foreach ($webServiceResult as $pluginResult) {
|
|
||||||
$pluginData = new PluginUpdateData($pluginResult);
|
|
||||||
$pluginsData[$pluginData->pluginId] = $pluginData;
|
|
||||||
}
|
|
||||||
return $pluginsData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check for Plugin Updates
|
* Check for Plugin Updates
|
||||||
*
|
*
|
||||||
@ -297,7 +213,6 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
$pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
|
$pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
|
||||||
foreach ($pluginClasses as $pluginClass) {
|
foreach ($pluginClasses as $pluginClass) {
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var Plugin $pluginClass
|
* @var Plugin $pluginClass
|
||||||
*/
|
*/
|
||||||
$pluginId = $pluginClass::getId();
|
$pluginId = $pluginClass::getId();
|
||||||
@ -322,10 +237,11 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
*
|
*
|
||||||
* @param PluginUpdateData $pluginUpdateData
|
* @param PluginUpdateData $pluginUpdateData
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
|
* @param bool $update
|
||||||
*/
|
*/
|
||||||
private function installPlugin(PluginUpdateData $pluginUpdateData, Player $player = null, $update = false) {
|
private function installPlugin(PluginUpdateData $pluginUpdateData, Player $player = null, $update = false) {
|
||||||
$self = $this;
|
$self = $this;
|
||||||
$this->maniaControl->fileReader->loadFile($pluginUpdateData->url, function ($updateFileContent, $error) use(&$self, &$pluginUpdateData, &$player, &$update) {
|
$this->maniaControl->fileReader->loadFile($pluginUpdateData->url, function ($updateFileContent, $error) use (&$self, &$pluginUpdateData, &$player, &$update) {
|
||||||
$actionNoun = ($update ? 'Update' : 'Install');
|
$actionNoun = ($update ? 'Update' : 'Install');
|
||||||
$actionVerb = ($update ? 'Updating' : 'Installing');
|
$actionVerb = ($update ? 'Updating' : 'Installing');
|
||||||
$actionVerbDone = ($update ? 'updated' : 'installed');
|
$actionVerbDone = ($update ? 'updated' : 'installed');
|
||||||
@ -383,8 +299,7 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
$self->maniaControl->chat->sendError($message, $player);
|
$self->maniaControl->chat->sendError($message, $player);
|
||||||
}
|
}
|
||||||
$self->maniaControl->log($message);
|
$self->maniaControl->log($message);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$message = "Successfully loaded fresh installed Plugin '{$pluginUpdateData->pluginName}'!";
|
$message = "Successfully loaded fresh installed Plugin '{$pluginUpdateData->pluginName}'!";
|
||||||
if ($player) {
|
if ($player) {
|
||||||
$self->maniaControl->chat->sendSuccess($message, $player);
|
$self->maniaControl->chat->sendSuccess($message, $player);
|
||||||
@ -397,4 +312,82 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle PlayerManialinkPageAnswer callback
|
||||||
|
*
|
||||||
|
* @param array $callback
|
||||||
|
*/
|
||||||
|
public function handleManialinkPageAnswer(array $callback) {
|
||||||
|
$actionId = $callback[1][2];
|
||||||
|
$update = (strpos($actionId, PluginMenu::ACTION_PREFIX_UPDATEPLUGIN) === 0);
|
||||||
|
$install = (strpos($actionId, PluginInstallMenu::ACTION_PREFIX_INSTALLPLUGIN) === 0);
|
||||||
|
if (!$update && !$install) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$login = $callback[1][1];
|
||||||
|
$player = $this->maniaControl->playerManager->getPlayer($login);
|
||||||
|
|
||||||
|
if ($update) {
|
||||||
|
$pluginClass = substr($actionId, strlen(PluginMenu::ACTION_PREFIX_UPDATEPLUGIN));
|
||||||
|
if ($pluginClass == 'All') {
|
||||||
|
$this->performPluginsUpdate($player);
|
||||||
|
} else {
|
||||||
|
$pluginUpdateData = $this->getPluginUpdate($pluginClass);
|
||||||
|
if ($pluginUpdateData) {
|
||||||
|
$this->installPlugin($pluginUpdateData, $player, true);
|
||||||
|
} else {
|
||||||
|
$message = 'Error loading Plugin Update Data!';
|
||||||
|
$this->maniaControl->chat->sendError($message, $player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$pluginId = substr($actionId, strlen(PluginInstallMenu::ACTION_PREFIX_INSTALLPLUGIN));
|
||||||
|
|
||||||
|
$url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
|
||||||
|
$self = $this;
|
||||||
|
$this->maniaControl->fileReader->loadFile($url, function ($data, $error) use (&$self, &$player) {
|
||||||
|
if ($error || !$data) {
|
||||||
|
$message = "Error loading Plugin Install Data! {$error}";
|
||||||
|
$self->maniaControl->chat->sendError($message, $player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$data = json_decode($data);
|
||||||
|
if (!isset($data[0])) {
|
||||||
|
$message = "Error loading Plugin Install Data! {$error}";
|
||||||
|
$self->maniaControl->chat->sendError($message, $player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$pluginUpdateData = new PluginUpdateData($data[0]);
|
||||||
|
$self->installPlugin($pluginUpdateData, $player);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check given Plugin Class for Update
|
||||||
|
*
|
||||||
|
* @param string $pluginClass
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getPluginUpdate($pluginClass) {
|
||||||
|
$pluginClass = PluginManager::getPluginClass($pluginClass);
|
||||||
|
/**
|
||||||
|
* @var Plugin $pluginClass
|
||||||
|
*/
|
||||||
|
$pluginId = $pluginClass::getId();
|
||||||
|
$url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
|
||||||
|
$dataJson = FileUtil::loadFile($url);
|
||||||
|
$pluginVersions = json_decode($dataJson);
|
||||||
|
if (!$pluginVersions || !isset($pluginVersions[0])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$pluginUpdateData = new PluginUpdateData($pluginVersions[0]);
|
||||||
|
$pluginVersion = $pluginClass::getVersion();
|
||||||
|
if ($pluginUpdateData->isNewerThan($pluginVersion)) {
|
||||||
|
return $pluginUpdateData;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,8 @@ namespace ManiaControl\Update;
|
|||||||
/**
|
/**
|
||||||
* Update Data Structure
|
* Update Data Structure
|
||||||
*
|
*
|
||||||
* @author ManiaControl Team
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class UpdateData {
|
class UpdateData {
|
||||||
|
@ -6,17 +6,17 @@ use ManiaControl\Admin\AuthenticationManager;
|
|||||||
use ManiaControl\Callbacks\CallbackListener;
|
use ManiaControl\Callbacks\CallbackListener;
|
||||||
use ManiaControl\Callbacks\TimerListener;
|
use ManiaControl\Callbacks\TimerListener;
|
||||||
use ManiaControl\Commands\CommandListener;
|
use ManiaControl\Commands\CommandListener;
|
||||||
|
use ManiaControl\Files\BackupUtil;
|
||||||
use ManiaControl\Files\FileUtil;
|
use ManiaControl\Files\FileUtil;
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
use ManiaControl\Players\Player;
|
use ManiaControl\Players\Player;
|
||||||
use ManiaControl\Players\PlayerManager;
|
use ManiaControl\Players\PlayerManager;
|
||||||
use ManiaControl\Files\BackupUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manager checking for ManiaControl Core Updates
|
* Manager checking for ManiaControl Core Updates
|
||||||
*
|
*
|
||||||
* @author ManiaControl Team
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class UpdateManager implements CallbackListener, CommandListener, TimerListener {
|
class UpdateManager implements CallbackListener, CommandListener, TimerListener {
|
||||||
@ -44,7 +44,6 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
|
|||||||
*/
|
*/
|
||||||
private $maniaControl = null;
|
private $maniaControl = null;
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var UpdateData $coreUpdateData
|
* @var UpdateData $coreUpdateData
|
||||||
*/
|
*/
|
||||||
private $coreUpdateData = null;
|
private $coreUpdateData = null;
|
||||||
@ -83,13 +82,6 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
|
|||||||
$this->pluginUpdateManager = new PluginUpdateManager($maniaControl);
|
$this->pluginUpdateManager = new PluginUpdateManager($maniaControl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Start an Update Check
|
|
||||||
*/
|
|
||||||
public function checkUpdate() {
|
|
||||||
$this->checkCoreUpdateAsync(array($this, 'handleUpdateCheck'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform Hourly Update Check
|
* Perform Hourly Update Check
|
||||||
*
|
*
|
||||||
@ -104,6 +96,56 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
|
|||||||
$this->checkUpdate();
|
$this->checkUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Core Update Data
|
||||||
|
*
|
||||||
|
* @param UpdateData $coreUpdateData
|
||||||
|
*/
|
||||||
|
public function setCoreUpdateData(UpdateData $coreUpdateData = null) {
|
||||||
|
$this->coreUpdateData = $coreUpdateData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start an Update Check
|
||||||
|
*/
|
||||||
|
public function checkUpdate() {
|
||||||
|
$this->checkCoreUpdateAsync(array($this, 'handleUpdateCheck'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks a Core Update asynchronously
|
||||||
|
*
|
||||||
|
* @param callable $function
|
||||||
|
*/
|
||||||
|
private function checkCoreUpdateAsync($function) {
|
||||||
|
$updateChannel = $this->getCurrentUpdateChannelSetting();
|
||||||
|
$url = ManiaControl::URL_WEBSERVICE . 'versions?current=1&channel=' . $updateChannel;
|
||||||
|
|
||||||
|
$this->maniaControl->fileReader->loadFile($url, function ($dataJson, $error) use (&$function) {
|
||||||
|
$versions = json_decode($dataJson);
|
||||||
|
if (!$versions || !isset($versions[0])) {
|
||||||
|
call_user_func($function, null);
|
||||||
|
} else {
|
||||||
|
$updateData = new UpdateData($versions[0]);
|
||||||
|
call_user_func($function, $updateData);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the Update Channel Setting
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getCurrentUpdateChannelSetting() {
|
||||||
|
$updateChannel = $this->maniaControl->settingManager->getSetting($this, self::SETTING_UPDATECHECK_CHANNEL);
|
||||||
|
$updateChannel = strtolower($updateChannel);
|
||||||
|
if (!in_array($updateChannel, array(self::CHANNEL_RELEASE, self::CHANNEL_BETA, self::CHANNEL_NIGHTLY))) {
|
||||||
|
$updateChannel = self::CHANNEL_RELEASE;
|
||||||
|
}
|
||||||
|
return $updateChannel;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle the fetched Update Data
|
* Handle the fetched Update Data
|
||||||
*
|
*
|
||||||
@ -122,8 +164,7 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
|
|||||||
|
|
||||||
if ($this->isNightlyUpdateChannel()) {
|
if ($this->isNightlyUpdateChannel()) {
|
||||||
$this->maniaControl->log("New Nightly Build ({$updateData->releaseDate}) available!");
|
$this->maniaControl->log("New Nightly Build ({$updateData->releaseDate}) available!");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$this->maniaControl->log("New ManiaControl Version {$updateData->version} available!");
|
$this->maniaControl->log("New ManiaControl Version {$updateData->version} available!");
|
||||||
}
|
}
|
||||||
$this->setCoreUpdateData($updateData);
|
$this->setCoreUpdateData($updateData);
|
||||||
@ -153,6 +194,34 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
|
|||||||
return ($updateData->version > ManiaControl::VERSION);
|
return ($updateData->version > ManiaControl::VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if ManiaControl is running the Nightly Update Channel
|
||||||
|
*
|
||||||
|
* @param string $updateChannel
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isNightlyUpdateChannel($updateChannel = null) {
|
||||||
|
if (!$updateChannel) {
|
||||||
|
$updateChannel = $this->getCurrentUpdateChannelSetting();
|
||||||
|
}
|
||||||
|
return ($updateChannel === self::CHANNEL_NIGHTLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Build Date of the local Nightly Build Version
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getNightlyBuildDate() {
|
||||||
|
if (!$this->currentBuildDate) {
|
||||||
|
$nightlyBuildDateFile = ManiaControlDir . '/core/nightly_build.txt';
|
||||||
|
if (file_exists($nightlyBuildDateFile)) {
|
||||||
|
$this->currentBuildDate = file_get_contents($nightlyBuildDateFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this->currentBuildDate;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the Update Data is compatible with the Server
|
* Check if the Update Data is compatible with the Server
|
||||||
*
|
*
|
||||||
@ -174,46 +243,6 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Core Update Data
|
|
||||||
*
|
|
||||||
* @param UpdateData $coreUpdateData
|
|
||||||
*/
|
|
||||||
public function setCoreUpdateData(UpdateData $coreUpdateData = null) {
|
|
||||||
$this->coreUpdateData = $coreUpdateData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle ManiaControl PlayerJoined callback
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function handlePlayerJoined(Player $player) {
|
|
||||||
if (!$this->coreUpdateData) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Announce available update
|
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATE)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->isNightlyUpdateChannel()) {
|
|
||||||
$this->maniaControl->chat->sendSuccess('New Nightly Build (' . $this->coreUpdateData->releaseDate . ') available!', $player->login);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$this->maniaControl->chat->sendInformation('New ManiaControl Version ' . $this->coreUpdateData->version . ' available!', $player->login);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle Player Disconnect Callback
|
|
||||||
*
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function handlePlayerDisconnect(Player $player) {
|
|
||||||
$this->checkAutoUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if an automatic Update should be performed
|
* Check if an automatic Update should be performed
|
||||||
*/
|
*/
|
||||||
@ -235,138 +264,6 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
|
|||||||
$this->performCoreUpdate();
|
$this->performCoreUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle //checkupdate command
|
|
||||||
*
|
|
||||||
* @param array $chatCallback
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function handle_CheckUpdate(array $chatCallback, Player $player) {
|
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATECHECK)) {
|
|
||||||
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$self = $this;
|
|
||||||
$this->checkCoreUpdateAsync(function (UpdateData $updateData = null) use(&$self, &$player) {
|
|
||||||
if (!$self->checkUpdateData($updateData)) {
|
|
||||||
$self->maniaControl->chat->sendInformation('No Update available!', $player->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$self->checkUpdateDataBuildVersion($updateData)) {
|
|
||||||
$self->maniaControl->chat->sendError("Please update Your Server to '{$updateData->minDedicatedBuild}' in order to receive further Updates!", $player->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$isNightly = $self->isNightlyUpdateChannel();
|
|
||||||
if ($isNightly) {
|
|
||||||
$buildDate = $self->getNightlyBuildDate();
|
|
||||||
if ($buildDate) {
|
|
||||||
if ($updateData->isNewerThan($buildDate)) {
|
|
||||||
$self->maniaControl->chat->sendInformation("No new Build available! (Current Build: '{$buildDate}')", $player->login);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$self->maniaControl->chat->sendSuccess("New Nightly Build ({$updateData->releaseDate}) available! (Current Build: '{$buildDate}')", $player->login);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$self->maniaControl->chat->sendSuccess("New Nightly Build ('{$updateData->releaseDate}') available!", $player->login);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$self->maniaControl->chat->sendSuccess('Update for Version ' . $updateData->version . ' available!', $player->login);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Build Date of the local Nightly Build Version
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getNightlyBuildDate() {
|
|
||||||
if (!$this->currentBuildDate) {
|
|
||||||
$nightlyBuildDateFile = ManiaControlDir . '/core/nightly_build.txt';
|
|
||||||
if (file_exists($nightlyBuildDateFile)) {
|
|
||||||
$this->currentBuildDate = file_get_contents($nightlyBuildDateFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $this->currentBuildDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the Build Date of the local Nightly Build Version
|
|
||||||
*
|
|
||||||
* @param string $date
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function setNightlyBuildDate($date) {
|
|
||||||
$nightlyBuildDateFile = ManiaControlDir . '/core/nightly_build.txt';
|
|
||||||
$success = (bool) file_put_contents($nightlyBuildDateFile, $date);
|
|
||||||
$this->currentBuildDate = $date;
|
|
||||||
return $success;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle //coreupdate command
|
|
||||||
*
|
|
||||||
* @param array $chatCallback
|
|
||||||
* @param Player $player
|
|
||||||
*/
|
|
||||||
public function handle_CoreUpdate(array $chatCallback, Player $player) {
|
|
||||||
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATE)) {
|
|
||||||
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$self = $this;
|
|
||||||
$this->checkCoreUpdateAsync(function (UpdateData $updateData = null) use(&$self, &$player) {
|
|
||||||
if (!$updateData) {
|
|
||||||
$self->maniaControl->chat->sendError('Update is currently not possible!', $player->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!$self->checkUpdateDataBuildVersion($updateData)) {
|
|
||||||
$self->maniaControl->chat->sendError("The Next ManiaControl Update requires a newer Dedicated Server Version!", $player->login);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$message = "Starting Update to Version v{$updateData->version}...";
|
|
||||||
$self->maniaControl->chat->sendInformation($message, $player->login);
|
|
||||||
$self->maniaControl->log($message);
|
|
||||||
|
|
||||||
$performBackup = $self->maniaControl->settingManager->getSetting($self, UpdateManager::SETTING_PERFORM_BACKUPS);
|
|
||||||
if ($performBackup && !BackupUtil::performFullBackup()) {
|
|
||||||
$message = 'Creating Backup failed!';
|
|
||||||
$self->maniaControl->chat->sendError($message, $player->login);
|
|
||||||
$self->maniaControl->log($message);
|
|
||||||
}
|
|
||||||
|
|
||||||
$self->performCoreUpdate($player);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks a Core Update asynchronously
|
|
||||||
*
|
|
||||||
* @param callable $function
|
|
||||||
*/
|
|
||||||
private function checkCoreUpdateAsync($function) {
|
|
||||||
$updateChannel = $this->getCurrentUpdateChannelSetting();
|
|
||||||
$url = ManiaControl::URL_WEBSERVICE . 'versions?current=1&channel=' . $updateChannel;
|
|
||||||
|
|
||||||
$this->maniaControl->fileReader->loadFile($url, function ($dataJson, $error) use(&$function) {
|
|
||||||
$versions = json_decode($dataJson);
|
|
||||||
if (!$versions || !isset($versions[0])) {
|
|
||||||
call_user_func($function, null);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$updateData = new UpdateData($versions[0]);
|
|
||||||
call_user_func($function, $updateData);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a Core Update
|
* Perform a Core Update
|
||||||
*
|
*
|
||||||
@ -405,7 +302,7 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
$self = $this;
|
$self = $this;
|
||||||
$this->maniaControl->fileReader->loadFile($this->coreUpdateData->url, function ($updateFileContent, $error) use(&$self, &$updateData, &$player) {
|
$this->maniaControl->fileReader->loadFile($this->coreUpdateData->url, function ($updateFileContent, $error) use (&$self, &$updateData, &$player) {
|
||||||
$tempDir = FileUtil::getTempFolder();
|
$tempDir = FileUtil::getTempFolder();
|
||||||
$updateFileName = $tempDir . basename($updateData->url);
|
$updateFileName = $tempDir . basename($updateData->url);
|
||||||
|
|
||||||
@ -450,28 +347,125 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if ManiaControl is running the Nightly Update Channel
|
* Set the Build Date of the local Nightly Build Version
|
||||||
*
|
*
|
||||||
* @param string $updateChannel
|
* @param string $date
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function isNightlyUpdateChannel($updateChannel = null) {
|
private function setNightlyBuildDate($date) {
|
||||||
if (!$updateChannel) {
|
$nightlyBuildDateFile = ManiaControlDir . '/core/nightly_build.txt';
|
||||||
$updateChannel = $this->getCurrentUpdateChannelSetting();
|
$success = (bool)file_put_contents($nightlyBuildDateFile, $date);
|
||||||
}
|
$this->currentBuildDate = $date;
|
||||||
return ($updateChannel === self::CHANNEL_NIGHTLY);
|
return $success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the Update Channel Setting
|
* Handle ManiaControl PlayerJoined callback
|
||||||
*
|
*
|
||||||
* @return string
|
* @param Player $player
|
||||||
*/
|
*/
|
||||||
private function getCurrentUpdateChannelSetting() {
|
public function handlePlayerJoined(Player $player) {
|
||||||
$updateChannel = $this->maniaControl->settingManager->getSetting($this, self::SETTING_UPDATECHECK_CHANNEL);
|
if (!$this->coreUpdateData) {
|
||||||
$updateChannel = strtolower($updateChannel);
|
return;
|
||||||
if (!in_array($updateChannel, array(self::CHANNEL_RELEASE, self::CHANNEL_BETA, self::CHANNEL_NIGHTLY))) {
|
|
||||||
$updateChannel = self::CHANNEL_RELEASE;
|
|
||||||
}
|
}
|
||||||
return $updateChannel;
|
// Announce available update
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATE)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->isNightlyUpdateChannel()) {
|
||||||
|
$this->maniaControl->chat->sendSuccess('New Nightly Build (' . $this->coreUpdateData->releaseDate . ') available!', $player->login);
|
||||||
|
} else {
|
||||||
|
$this->maniaControl->chat->sendInformation('New ManiaControl Version ' . $this->coreUpdateData->version . ' available!', $player->login);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle Player Disconnect Callback
|
||||||
|
*
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function handlePlayerDisconnect(Player $player) {
|
||||||
|
$this->checkAutoUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle //checkupdate command
|
||||||
|
*
|
||||||
|
* @param array $chatCallback
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function handle_CheckUpdate(array $chatCallback, Player $player) {
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATECHECK)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$self = $this;
|
||||||
|
$this->checkCoreUpdateAsync(function (UpdateData $updateData = null) use (&$self, &$player) {
|
||||||
|
if (!$self->checkUpdateData($updateData)) {
|
||||||
|
$self->maniaControl->chat->sendInformation('No Update available!', $player->login);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$self->checkUpdateDataBuildVersion($updateData)) {
|
||||||
|
$self->maniaControl->chat->sendError("Please update Your Server to '{$updateData->minDedicatedBuild}' in order to receive further Updates!", $player->login);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$isNightly = $self->isNightlyUpdateChannel();
|
||||||
|
if ($isNightly) {
|
||||||
|
$buildDate = $self->getNightlyBuildDate();
|
||||||
|
if ($buildDate) {
|
||||||
|
if ($updateData->isNewerThan($buildDate)) {
|
||||||
|
$self->maniaControl->chat->sendInformation("No new Build available! (Current Build: '{$buildDate}')", $player->login);
|
||||||
|
} else {
|
||||||
|
$self->maniaControl->chat->sendSuccess("New Nightly Build ({$updateData->releaseDate}) available! (Current Build: '{$buildDate}')", $player->login);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$self->maniaControl->chat->sendSuccess("New Nightly Build ('{$updateData->releaseDate}') available!", $player->login);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$self->maniaControl->chat->sendSuccess('Update for Version ' . $updateData->version . ' available!', $player->login);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle //coreupdate command
|
||||||
|
*
|
||||||
|
* @param array $chatCallback
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function handle_CoreUpdate(array $chatCallback, Player $player) {
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATE)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$self = $this;
|
||||||
|
$this->checkCoreUpdateAsync(function (UpdateData $updateData = null) use (&$self, &$player) {
|
||||||
|
if (!$updateData) {
|
||||||
|
$self->maniaControl->chat->sendError('Update is currently not possible!', $player->login);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!$self->checkUpdateDataBuildVersion($updateData)) {
|
||||||
|
$self->maniaControl->chat->sendError("The Next ManiaControl Update requires a newer Dedicated Server Version!", $player->login);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$message = "Starting Update to Version v{$updateData->version}...";
|
||||||
|
$self->maniaControl->chat->sendInformation($message, $player->login);
|
||||||
|
$self->maniaControl->log($message);
|
||||||
|
|
||||||
|
$performBackup = $self->maniaControl->settingManager->getSetting($self, UpdateManager::SETTING_PERFORM_BACKUPS);
|
||||||
|
if ($performBackup && !BackupUtil::performFullBackup()) {
|
||||||
|
$message = 'Creating Backup failed!';
|
||||||
|
$self->maniaControl->chat->sendError($message, $player->login);
|
||||||
|
$self->maniaControl->log($message);
|
||||||
|
}
|
||||||
|
|
||||||
|
$self->performCoreUpdate($player);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
|
|||||||
/**
|
/**
|
||||||
* ManiaControl Chat-Message Plugin
|
* ManiaControl Chat-Message Plugin
|
||||||
*
|
*
|
||||||
* @author kremsy
|
* @author kremsy <kremsy@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class ChatMessagePlugin implements CommandListener, Plugin {
|
class ChatMessagePlugin implements CommandListener, Plugin {
|
||||||
@ -43,6 +43,51 @@ class ChatMessagePlugin implements CommandListener, Plugin {
|
|||||||
//do nothing
|
//do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 "Plugin offers various Chat-Commands like /gg /hi /afk /rq...";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the plugin
|
* Load the plugin
|
||||||
*
|
*
|
||||||
@ -113,6 +158,30 @@ class ChatMessagePlugin implements CommandListener, Plugin {
|
|||||||
$this->maniaControl->chat->sendChat($msg, null, false);
|
$this->maniaControl->chat->sendChat($msg, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a Player is in the PlayerList and returns the nickname if he is, can be called per login, pid or nickname or lj for
|
||||||
|
* (last joined)
|
||||||
|
*
|
||||||
|
* @param $login
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
private function getTarget($login) {
|
||||||
|
/** @var Player $player */
|
||||||
|
$player = null;
|
||||||
|
foreach ($this->maniaControl->playerManager->getPlayers() as $player) {
|
||||||
|
if ($login == $player->login || $login == $player->pid || $login == $player->nickname) {
|
||||||
|
return $player->nickname;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($player && $login == 'lj') {
|
||||||
|
return $player->nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
//returns the text given if nothing matches
|
||||||
|
return $login;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bye Message
|
* Bye Message
|
||||||
*
|
*
|
||||||
@ -314,7 +383,7 @@ class ChatMessagePlugin implements CommandListener, Plugin {
|
|||||||
$message = '$39F Thanks for Playing, see you around!$z';
|
$message = '$39F Thanks for Playing, see you around!$z';
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->kick($player->login, $message);
|
$this->maniaControl->client->kick($player->login, $message);
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line 316: " . $e->getMessage());
|
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line 316: " . $e->getMessage());
|
||||||
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
|
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
|
||||||
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
||||||
@ -335,7 +404,7 @@ class ChatMessagePlugin implements CommandListener, Plugin {
|
|||||||
$message = '$39F Thanks for Playing, please come back soon!$z ';
|
$message = '$39F Thanks for Playing, please come back soon!$z ';
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->kick($player->login, $message);
|
$this->maniaControl->client->kick($player->login, $message);
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line " . $e->getLine() . ": " . $e->getMessage());
|
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line " . $e->getLine() . ": " . $e->getMessage());
|
||||||
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
|
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
|
||||||
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
||||||
@ -361,7 +430,7 @@ class ChatMessagePlugin implements CommandListener, Plugin {
|
|||||||
// force into spec
|
// force into spec
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->forceSpectator($player->login, 3);
|
$this->maniaControl->client->forceSpectator($player->login, 3);
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line " . $e->getLine() . ": " . $e->getMessage());
|
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line " . $e->getLine() . ": " . $e->getMessage());
|
||||||
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
|
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
|
||||||
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
|
||||||
@ -371,7 +440,7 @@ class ChatMessagePlugin implements CommandListener, Plugin {
|
|||||||
// free player slot
|
// free player slot
|
||||||
try {
|
try {
|
||||||
$this->maniaControl->client->spectatorReleasePlayerSlot($player->login);
|
$this->maniaControl->client->spectatorReleasePlayerSlot($player->login);
|
||||||
} catch(Exception $e) {
|
} catch (Exception $e) {
|
||||||
if ($e->getMessage() != 'The player is not a spectator') {
|
if ($e->getMessage() != 'The player is not a spectator') {
|
||||||
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line " . $e->getLine() . ": " . $e->getMessage());
|
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line " . $e->getLine() . ": " . $e->getMessage());
|
||||||
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
|
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
|
||||||
@ -380,73 +449,4 @@ class ChatMessagePlugin implements CommandListener, Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a Player is in the PlayerList and returns the nickname if he is, can be called per login, pid or nickname or lj for
|
|
||||||
* (last joined)
|
|
||||||
*
|
|
||||||
* @param $login
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
private function getTarget($login) {
|
|
||||||
/** @var Player $player */
|
|
||||||
$player = null;
|
|
||||||
foreach($this->maniaControl->playerManager->getPlayers() as $player) {
|
|
||||||
if ($login == $player->login || $login == $player->pid || $login == $player->nickname) {
|
|
||||||
return $player->nickname;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($player && $login == 'lj') {
|
|
||||||
return $player->nickname;
|
|
||||||
}
|
|
||||||
|
|
||||||
//returns the text given if nothing matches
|
|
||||||
return $login;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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 "Plugin offers various Chat-Commands like /gg /hi /afk /rq...";
|
|
||||||
}
|
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
@ -24,8 +24,8 @@ use ManiaControl\Plugins\Plugin;
|
|||||||
/**
|
/**
|
||||||
* ManiaControl Widget Plugin
|
* ManiaControl Widget Plugin
|
||||||
*
|
*
|
||||||
* @author steeffeen and kremsy
|
* @author ManiaControl Team <mail@maniacontrol.com>
|
||||||
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
||||||
@ -88,6 +88,51 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
//do nothing
|
//do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 'Plugin offers some Widgets';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the plugin
|
* Load the plugin
|
||||||
*
|
*
|
||||||
@ -136,22 +181,7 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unload the plugin and its resources
|
* Display the Widgets
|
||||||
*/
|
|
||||||
public function unload() {
|
|
||||||
$this->closeWidget(self::MLID_CLOCKWIDGET);
|
|
||||||
$this->closeWidget(self::MLID_SERVERINFOWIDGET);
|
|
||||||
$this->closeWidget(self::MLID_MAPWIDGET);
|
|
||||||
$this->closeWidget(self::MLID_NEXTMAPWIDGET);
|
|
||||||
$this->maniaControl->callbackManager->unregisterCallbackListener($this);
|
|
||||||
$this->maniaControl->timerManager->unregisterTimerListenings($this);
|
|
||||||
unset($this->maniaControl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays the Widgets onLoad
|
|
||||||
*
|
|
||||||
* @param array $callback
|
|
||||||
*/
|
*/
|
||||||
private function displayWidgets() {
|
private function displayWidgets() {
|
||||||
// Display Map Widget
|
// Display Map Widget
|
||||||
@ -168,11 +198,11 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Displays the Map Widget
|
* Display the Map Widget
|
||||||
*
|
*
|
||||||
* @param String $login
|
* @param string $login
|
||||||
*/
|
*/
|
||||||
public function displayMapWidget($login = false) {
|
public function displayMapWidget($login = null) {
|
||||||
$pos_x = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_POSX);
|
$pos_x = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_POSX);
|
||||||
$pos_y = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_POSY);
|
$pos_y = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_POSY);
|
||||||
$width = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_WIDTH);
|
$width = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_WIDTH);
|
||||||
@ -280,11 +310,11 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Displays the Server Info Widget
|
* Display the Server Info Widget
|
||||||
*
|
*
|
||||||
* @param String $login
|
* @param string $login
|
||||||
*/
|
*/
|
||||||
public function displayServerInfoWidget($login = false) {
|
public function displayServerInfoWidget($login = null) {
|
||||||
$pos_x = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVERINFO_WIDGET_POSX);
|
$pos_x = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVERINFO_WIDGET_POSX);
|
||||||
$pos_y = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVERINFO_WIDGET_POSY);
|
$pos_y = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVERINFO_WIDGET_POSY);
|
||||||
$width = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVERINFO_WIDGET_WIDTH);
|
$width = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVERINFO_WIDGET_WIDTH);
|
||||||
@ -318,7 +348,7 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
/**
|
/**
|
||||||
* @var Player $player
|
* @var Player $player
|
||||||
*/
|
*/
|
||||||
foreach($players as $player) {
|
foreach ($players as $player) {
|
||||||
if ($player->isSpectator) {
|
if ($player->isSpectator) {
|
||||||
$spectatorCount++;
|
$spectatorCount++;
|
||||||
} else {
|
} else {
|
||||||
@ -383,16 +413,16 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle on Begin Map
|
* Unload the plugin and its resources
|
||||||
*
|
|
||||||
* @param Map $map
|
|
||||||
*/
|
*/
|
||||||
public function handleOnBeginMap(Map $map) {
|
public function unload() {
|
||||||
// Display Map Widget
|
$this->closeWidget(self::MLID_CLOCKWIDGET);
|
||||||
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_ACTIVATED)) {
|
$this->closeWidget(self::MLID_SERVERINFOWIDGET);
|
||||||
$this->displayMapWidget();
|
$this->closeWidget(self::MLID_MAPWIDGET);
|
||||||
}
|
|
||||||
$this->closeWidget(self::MLID_NEXTMAPWIDGET);
|
$this->closeWidget(self::MLID_NEXTMAPWIDGET);
|
||||||
|
$this->maniaControl->callbackManager->unregisterCallbackListener($this);
|
||||||
|
$this->maniaControl->timerManager->unregisterTimerListenings($this);
|
||||||
|
unset($this->maniaControl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -405,6 +435,19 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
$this->maniaControl->manialinkManager->sendManialink($emptyManialink);
|
$this->maniaControl->manialinkManager->sendManialink($emptyManialink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle on Begin Map
|
||||||
|
*
|
||||||
|
* @param Map $map
|
||||||
|
*/
|
||||||
|
public function handleOnBeginMap(Map $map) {
|
||||||
|
// Display Map Widget
|
||||||
|
if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_ACTIVATED)) {
|
||||||
|
$this->displayMapWidget();
|
||||||
|
}
|
||||||
|
$this->closeWidget(self::MLID_NEXTMAPWIDGET);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle on End Map
|
* Handle on End Map
|
||||||
*
|
*
|
||||||
@ -543,49 +586,4 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
|
|||||||
$this->displayServerInfoWidget();
|
$this->displayServerInfoWidget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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 'Plugin offers some Widgets';
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user