added player actions class

This commit is contained in:
kremsy 2013-12-23 20:57:50 +01:00
parent f7f10c422c
commit 28a9054c0d
4 changed files with 102 additions and 23 deletions

View File

@ -36,6 +36,7 @@ require_once __DIR__ . '/Maps/Map.php';
require_once __DIR__ . '/Maps/MapManager.php';
require_once __DIR__ . '/Maps/MapList.php';
require_once __DIR__ . '/Players/PlayerManager.php';
require_once __DIR__ . '/Players/PlayerActions.php';
require_once __DIR__ . '/Plugins/PluginManager.php';
require_once __DIR__ . '/Players/PlayerList.php';
require_once __DIR__ . '/Server/Server.php';

View File

@ -0,0 +1,59 @@
<?php
namespace ManiaControl\Players;
use ManiaControl\ManiaControl;
class PlayerActions {
/**
* Constants
*/
const BLUE_TEAM = 0;
const RED_TEAM = 1;
const SPECTATOR_USER_SELECTABLE = 0;
const SPECTATOR_SPECTATOR = 1;
const SPECTATOR_PLAYER = 2;
const SPECTATOR_BUT_KEEP_SELECTABLE = 3;
/**
* Private properties
*/
private $maniaControl = null;
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
}
/**
* Forces a Player to a certain team
* @param $adminLogin
* @param $login
* @param $teamId
*/
public function forcePlayerToTeam($adminLogin, $login, $teamId){
$this->maniaControl->client->query('ForcePlayerTeam', $login, $teamId); //TODO bestätigung und chatnachricht
}
/**
* Forces a Player to spectator
* @param $adminLogin
* @param $login
* @param int $spectatorState
*/
public function forcePlayerToSpectator($adminLogin, $login, $spectatorState = self::SPECTATOR_BUT_KEEP_SELECTABLE){
$this->maniaControl->client->query('ForceSpectator', $login, $spectatorState); //TODO bestätigung und chatnachricht
}
public function warnPlayer($adminLogin, $login, $message = ''){
}
public function kickPlayer($adminLogin, $login, $message = ''){
}
public function banPlayer($adminLogin, $login, $message = ''){
}
}

View File

@ -477,7 +477,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener {
$label->setY($y);
$label->setStyle($style);
$label->setTextSize($textSize);
$label->setText("Add Operator");
$label->setText("Add Moderator");
$label->setTextColor($textColor);
//render and display xml
@ -511,29 +511,43 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener {
*/
public function handleManialinkPageAnswer(array $callback){
$actionId = $callback[1][2];
$forceBlue = (strpos($actionId, self::ACTION_FORCE_BLUE) === 0);
$forceRed = (strpos($actionId, self::ACTION_FORCE_RED) === 0);
$forceSpec = (strpos($actionId, self::ACTION_FORCE_SPEC) === 0);
$playerAdvanced = (strpos($actionId, self::ACTION_PLAYER_ADV) === 0);
if(!$forceBlue && !$forceRed && !$forceSpec && !$playerAdvanced)
return;
$actionArray = explode(".", $actionId);
//TODO maybe with ids isntead of logins, lower network traffic
if($forceBlue){
$this->maniaControl->client->query('ForcePlayerTeam', $actionArray[2], 0); //TODO bestätigung
}else if($forceRed){
$this->maniaControl->client->query('ForcePlayerTeam', $actionArray[2], 1); //TODO bestätigung
}else if($forceSpec){
$this->maniaControl->client->query('ForceSpectator', $actionArray[2], 3); //TODO bestätigung
}else if($playerAdvanced){
$player = $this->maniaControl->playerManager->getPlayer($callback[1][1]);
$this->advancedPlayerWidget($callback, $player, $actionArray[2]);
//TODO maybe with ids instead of logins, lower network traffic
switch($actionArray[0].".".$actionArray[1]){
case self::ACTION_FORCE_BLUE:
$this->maniaControl->playerManager->playerActions->forcePlayerToTeam($callback[1][1],$actionArray[2],playerActions::BLUE_TEAM);
break;
case self::ACTION_FORCE_RED:
$this->maniaControl->playerManager->playerActions->forcePlayerToTeam($callback[1][1],$actionArray[2],playerActions::RED_TEAM);
break;
case self::ACTION_FORCE_SPEC:
$this->maniaControl->playerManager->playerActions->forcePlayerToSpectator($callback[1][1],$actionArray[2],playerActions::SPECTATOR_BUT_KEEP_SELECTABLE);
break;
case self::ACTION_WARN_PLAYER:
$this->maniaControl->playerManager->playerActions->warnPlayer($callback[1][1],$actionArray[2]);
break;
case self::ACTION_KICK_PLAYER:
$this->maniaControl->playerManager->playerActions->kickPlayer($callback[1][1],$actionArray[2]);
break;
case self::ACTION_BAN_PLAYER:
$this->maniaControl->playerManager->playerActions->banPlayer($callback[1][1],$actionArray[2]);
break;
case self::ACTION_PLAYER_ADV:
$player = $this->maniaControl->playerManager->getPlayer($callback[1][1]);
$this->advancedPlayerWidget($callback, $player, $actionArray[2]);
break;
}
/*
$addMaster = (strpos($actionId, self::ACTION_ADD_AS_MASTER) === 0);
$addAdmin = (strpos($actionId, self::ACTION_ADD_AS_ADMIN) === 0);
$addModerator = (strpos($actionId, self::ACTION_ADD_AS_MOD) === 0);
*/
}
/**

View File

@ -5,6 +5,7 @@ namespace ManiaControl\Players;
require_once __DIR__ . '/Player.php';
require_once __DIR__ . '/PlayerCommands.php';
use FML\Controls\Quad;
use ManiaControl\Formatter;
use ManiaControl\ManiaControl;
use ManiaControl\Callbacks\CallbackListener;
@ -24,7 +25,7 @@ class PlayerManager implements CallbackListener {
const CB_PLAYERINFOCHANGED = 'PlayerManagerCallback.PlayerInfoChanged';
const TABLE_PLAYERS = 'mc_players';
const SETTING_JOIN_LEAVE_MESSAGES = 'Enable Join & Leave Messages';
/**
* Private properties
*/
@ -32,6 +33,7 @@ class PlayerManager implements CallbackListener {
private $playerCommands = null;
private $playerList = array();
public $playerActions = null;
/**
* Construct player manager
*
@ -42,7 +44,9 @@ class PlayerManager implements CallbackListener {
$this->initTables();
$this->playerCommands = new PlayerCommands($maniaControl);
$this->playerActions = new PlayerActions($maniaControl);
// Init settings
$this->maniaControl->settingManager->initSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES, true);
@ -51,6 +55,7 @@ class PlayerManager implements CallbackListener {
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERCONNECT, $this, 'playerConnect');
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERDISCONNECT, $this, 'playerDisconnect');
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERINFOCHANGED, $this, 'playerInfoChanged');
}
/**
@ -104,7 +109,7 @@ class PlayerManager implements CallbackListener {
$player = new Player($playerInfo);
$this->addPlayer($player);
}
// Trigger own callback
$this->maniaControl->callbackManager->triggerCallback(self::CB_ONINIT, array(self::CB_ONINIT));
}