add Fast Kick plugin
This commit is contained in:
parent
9fda8274b4
commit
a8069ad874
1
.gitignore
vendored
1
.gitignore
vendored
@ -20,3 +20,4 @@
|
||||
!Beu/SimpleChatColorer.php
|
||||
!Beu/SimpleSkinsRemover.php
|
||||
!Beu/SmallTextOverlay.php
|
||||
!Beu/FastKick.php
|
239
Beu/FastKick.php
Normal file
239
Beu/FastKick.php
Normal file
@ -0,0 +1,239 @@
|
||||
<?php
|
||||
namespace Beu;
|
||||
|
||||
use ManiaControl\Logger;
|
||||
use ManiaControl\ManiaControl;
|
||||
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
|
||||
use ManiaControl\Players\Player;
|
||||
use ManiaControl\Players\PlayerActions;
|
||||
use ManiaControl\Plugins\Plugin;
|
||||
use ManiaControl\Commands\CommandListener;
|
||||
use FML\Controls\Frame;
|
||||
use FML\Controls\Label;
|
||||
use FML\Controls\Quad;
|
||||
use FML\Controls\Quads\Quad_Icons64x64_1;
|
||||
use FML\ManiaLink;
|
||||
|
||||
/**
|
||||
* Beu Donation Button
|
||||
*
|
||||
* @author Beu
|
||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||
*/
|
||||
class FastKick implements ManialinkPageAnswerListener, CommandListener, Plugin {
|
||||
/*
|
||||
* MARK: Constants
|
||||
*/
|
||||
const PLUGIN_ID = 212;
|
||||
const PLUGIN_VERSION = 1.0;
|
||||
const PLUGIN_NAME = 'Fast Kick';
|
||||
const PLUGIN_AUTHOR = 'Beu';
|
||||
|
||||
const MANIALINK_ID = 'FastKick::MainWindow';
|
||||
const ACTION_CLOSE = 'FastKick::close';
|
||||
const ACTION_KICK = 'FastKick::kick';
|
||||
|
||||
/*
|
||||
* MARK: Private properties
|
||||
*/
|
||||
private ManiaControl $maniaControl;
|
||||
|
||||
/*
|
||||
* MARK: Functions
|
||||
*/
|
||||
/**
|
||||
* @see \ManiaControl\Plugins\Plugin::prepare()
|
||||
*/
|
||||
public static function prepare(ManiaControl $maniaControl) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ManiaControl\Plugins\Plugin::getId()
|
||||
*/
|
||||
public static function getId() {
|
||||
return self::PLUGIN_ID;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ManiaControl\Plugins\Plugin::getName()
|
||||
*/
|
||||
public static function getName() {
|
||||
return self::PLUGIN_NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ManiaControl\Plugins\Plugin::getVersion()
|
||||
*/
|
||||
public static function getVersion() {
|
||||
return self::PLUGIN_VERSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ManiaControl\Plugins\Plugin::getAuthor()
|
||||
*/
|
||||
public static function getAuthor() {
|
||||
return self::PLUGIN_AUTHOR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ManiaControl\Plugins\Plugin::getDescription()
|
||||
*/
|
||||
public static function getDescription() {
|
||||
return "Quick plugin to kick player easily using //fk command by matching the nearest name";
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ManiaControl\Plugins\Plugin::load()
|
||||
*/
|
||||
public function load(ManiaControl $maniaControl) {
|
||||
$this->maniaControl = $maniaControl;
|
||||
|
||||
$this->maniaControl->getCommandManager()->registerCommandListener(['fkick', 'fk', 'fastkick'], $this, 'handleFastKick', true);
|
||||
|
||||
$this->maniaControl->getManialinkManager()->registerManialinkPageAnswerListener(self::ACTION_CLOSE, $this, 'handleClose');
|
||||
$this->maniaControl->getManialinkManager()->registerManialinkPageAnswerRegexListener('/^'. self::ACTION_KICK .'/', $this, 'handleKick');
|
||||
}
|
||||
|
||||
/**
|
||||
* handle Fast Kick command
|
||||
*
|
||||
* @param array $structure
|
||||
* @param Player $adminPlayer
|
||||
* @return void
|
||||
*/
|
||||
public function handleFastKick(array $structure, Player $adminPlayer) {
|
||||
if (!$this->maniaControl->getAuthenticationManager()->checkPermission($adminPlayer, PlayerActions::SETTING_PERMISSION_KICK_PLAYER)) {
|
||||
$this->maniaControl->getAuthenticationManager()->sendNotAllowed($adminPlayer);
|
||||
return;
|
||||
}
|
||||
|
||||
$params = explode(' ', $structure[1][2], 3);
|
||||
if (count($params) <= 1 || $params[1] === '') {
|
||||
$message = $this->maniaControl->getChat()->formatMessage(
|
||||
'No player name given! Example: %s',
|
||||
$params[0] .' <player name>'
|
||||
);
|
||||
$this->maniaControl->getChat()->sendUsageInfo($message, $adminPlayer);
|
||||
return;
|
||||
}
|
||||
|
||||
$target = $params[1];
|
||||
|
||||
$players = $this->maniaControl->getPlayerManager()->getPlayers();
|
||||
|
||||
$indexedList = [];
|
||||
foreach ($players as $player) {
|
||||
similar_text($target, $player->nickname, $percent);
|
||||
$indexedList[intval($percent)][] = $player;
|
||||
}
|
||||
krsort($indexedList);
|
||||
|
||||
$manialink = new ManiaLink(self::MANIALINK_ID);
|
||||
|
||||
$parentFrame = new Frame();
|
||||
$manialink->addChild($parentFrame);
|
||||
$parentFrame->setPosition(-150., -35., 100.);
|
||||
|
||||
$background = new Quad();
|
||||
$parentFrame->addChild($background);
|
||||
$background->setHorizontalAlign(Quad::LEFT);
|
||||
$background->setVerticalAlign(Quad::TOP);
|
||||
$background->setBackgroundColor('000000');
|
||||
$background->setOpacity(0.7);
|
||||
$background->setSize(60., 25.);
|
||||
$background->setZ(-1.);
|
||||
|
||||
$closeButton = new Quad_Icons64x64_1();
|
||||
$parentFrame->addChild($closeButton);
|
||||
$closeButton->setPosition(58., -2.);
|
||||
$closeButton->setSize(6, 6);
|
||||
$closeButton->setSubStyle($closeButton::SUBSTYLE_QuitRace);
|
||||
$closeButton->setAction(self::ACTION_CLOSE);
|
||||
|
||||
$headerName = new Label();
|
||||
$parentFrame->addChild($headerName);
|
||||
$headerName->setPosition(1., -3);
|
||||
$headerName->setHorizontalAlign($headerName::LEFT);
|
||||
$headerName->setTextFont('GameFontExtraBold');
|
||||
$headerName->setTextColor('ffffff');
|
||||
$headerName->setTextSize(1.5);
|
||||
$headerName->setText('Player Name');
|
||||
|
||||
$headerMatching = new Label();
|
||||
$parentFrame->addChild($headerMatching);
|
||||
$headerMatching->setPosition(40., -3);
|
||||
$headerMatching->setHorizontalAlign($headerMatching::CENTER);
|
||||
$headerMatching->setTextFont('GameFontExtraBold');
|
||||
$headerMatching->setTextColor('ffffff');
|
||||
$headerMatching->setTextSize(1.5);
|
||||
$headerMatching->setText('Matching');
|
||||
|
||||
$count = 1;
|
||||
$posY = -7.;
|
||||
foreach ($indexedList as $percent => $players) {
|
||||
foreach ($players as $player) {
|
||||
$frame = new Frame();
|
||||
$parentFrame->addChild($frame);
|
||||
$frame->setY($posY);
|
||||
|
||||
$name = new Label();
|
||||
$frame->addChild($name);
|
||||
$name->setX(1.5);
|
||||
$name->setSize(30., 3.5);
|
||||
$name->setHorizontalAlign($name::LEFT);
|
||||
$name->setTextFont('GameFontSemiBold');
|
||||
$name->setTextColor('ffffff');
|
||||
$name->setTextSize(1.2);
|
||||
$name->setText($player->nickname);
|
||||
|
||||
$matching = new Label();
|
||||
$frame->addChild($matching);
|
||||
$matching->setX(40.);
|
||||
$matching->setHorizontalAlign($name::CENTER);
|
||||
$matching->setTextFont('GameFontSemiBold');
|
||||
$matching->setTextColor('ffffff');
|
||||
$matching->setTextSize(1.2);
|
||||
$matching->setText($percent . '%');
|
||||
|
||||
$kickButton = new Quad();
|
||||
$frame->addChild($kickButton);
|
||||
$kickButton->setX(57.);
|
||||
$kickButton->setSize(4, 4);
|
||||
$kickButton->setStyle('UICommon64_2');
|
||||
$kickButton->setSubStyle('UserDelete_light');
|
||||
$kickButton->setAction(self::ACTION_KICK . '.' . $player->login);
|
||||
|
||||
$posY += -3.8;
|
||||
$count++;
|
||||
if ($count > 5) break 2;
|
||||
}
|
||||
}
|
||||
|
||||
$this->maniaControl->getManialinkManager()->sendManialink($manialink, $adminPlayer, ToggleUIFeature: false);
|
||||
}
|
||||
|
||||
public function handleClose(array $structure, Player $adminPlayer) {
|
||||
$this->maniaControl->getManialinkManager()->hideManialink(self::MANIALINK_ID, $adminPlayer);
|
||||
}
|
||||
|
||||
public function handleKick(array $structure, Player $adminPlayer) {
|
||||
if (!$this->maniaControl->getAuthenticationManager()->checkPermission($adminPlayer, PlayerActions::SETTING_PERMISSION_KICK_PLAYER)) {
|
||||
$this->maniaControl->getAuthenticationManager()->sendNotAllowed($adminPlayer);
|
||||
return;
|
||||
}
|
||||
$targetLogin = explode('.', $structure[1][2])[1];
|
||||
|
||||
$targetPlayer = $this->maniaControl->getPlayerManager()->getPlayer($targetLogin);
|
||||
Logger::log("========================= Fast kick info: ====");
|
||||
Logger::log(json_encode($targetPlayer));
|
||||
Logger::log(json_encode($this->maniaControl->getClient()->getNetworkStats()));
|
||||
|
||||
$this->maniaControl->getPlayerManager()->getPlayerActions()->kickPlayer($adminPlayer, $targetLogin);
|
||||
$this->maniaControl->getManialinkManager()->hideManialink(self::MANIALINK_ID, $adminPlayer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unload the plugin and its Resources
|
||||
*/
|
||||
public function unload() {}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user