Toevoeging van meer responses op messages

This commit is contained in:
Frank
2026-01-05 23:37:36 +01:00
parent 10c3dbc066
commit 8e3807e079
10 changed files with 340 additions and 22 deletions

View File

@@ -3,6 +3,7 @@
namespace App\Game\Service;
use App\Game\Enum\DecodeMessage;
use App\Game\Enum\SessionSettingType;
use App\Game\Entity\Player;
use App\Game\Repository\SessionSettingRepository;
use App\Tech\Entity\User;
@@ -52,7 +53,18 @@ class GameResponseService
private function getRechten(Player $player): array
{
$setting = $this->sessionSettingRepository->getSetting($player->getSession(), 'level', $player);
$settingName = match($player->getScreen()) {
1 => SessionSettingType::RIGHTS_FOR_PLAYER1,
2 => SessionSettingType::RIGHTS_FOR_PLAYER2,
3 => SessionSettingType::RIGHTS_FOR_PLAYER3,
default => null,
};
if (!$settingName) {
return [];
}
$setting = $this->sessionSettingRepository->getSetting($player->getSession(), $settingName, $player);
if (!$setting || !$setting->getValue()) {
return [];
}
@@ -69,7 +81,7 @@ class GameResponseService
switch($messagePart[0]) {
case '/chat':
if(!in_array('chat', $rechten))
return ['result' => ['Unknown command.']];
return ['result' => ['Unknown command']];
$this->handleChatMessage($message);
break;
@@ -77,22 +89,22 @@ class GameResponseService
return ['result' => $this->getHelpCommand($rechten)];
case '/decode':
if(!in_array('decode', $rechten))
return ['result' => ['Unknown command.']];
return ['result' => ['Unknown command']];
return ['result' => [$this->handleDecodeMessage($messagePart[1], $player)]];
case '/verify':
if(!in_array('verify', $rechten))
return ['result' => ['Unknown command.']];
return ['result' => ['Unknown command']];
$this->handleVerifyMessage($message);
break;
$result = $this->handleVerifyMessage($message);
return ['result' => [$result]];
default:
return ['result' => ['Unknown command.']];
return ['result' => ['Unknown command']];
}
return [];
}
private function checkConsoleCommando(string $message, Player $player) : array
private function checkConsoleCommando(string $message, Player $player, bool $sudo = false) : array
{
$messagePart = explode(' ', $message);
$rechten = $this->getRechten($player);
@@ -102,14 +114,22 @@ class GameResponseService
case 'ls':
break;
case 'cd':
$pwd = $this->playerService->getCurrentPwdOfPlayer($player);
if(!$pwd)
return ['result' => ['Unknown command']];
$newLocation = $this->goToNewDir($pwd, $messagePart[1], $player);
break;
if($newLocation === false)
return ['result' => ['Unknown path']];
$this->playerService->saveCurrentPwdOfPlayer($player, $newLocation);
return ['result' => ['Path: ' . $newLocation]];
case 'rm':
break;
case 'sudo':
break;
default:
return ['result' => ['Unknown command.']];
return ['result' => ['Unknown command']];
}
return [];
}
@@ -227,7 +247,86 @@ class GameResponseService
return $randomString;
}
private function handleVerifyMessage(string $message)
private function handleVerifyMessage(string $message) : string
{
return '';
}
private function goToNewDir(string $pwd, string $newPwd, Player $player) : string|bool
{
$allPossiblePaths = $this->getAllPossiblePaths($player);
$dirParts = explode('/', $newPwd);
$int = count($dirParts);
if($dirParts[0] == '') {
$newDir = '';
$startPart = 1;
} else {
$newDir = $pwd;
$startPart = 0;
}
for($i = $startPart; $i < $int; $i++) {
if($dirParts[$i] == '..')
$newDir = $this->getPrevPath($newDir);
else
$newDir .= '/' . $dirParts[$i];
if(!in_array($newDir, $allPossiblePaths))
return false;
}
return $newDir;
}
private function getPrevPath(string $pwd) : string
{
$pwdParts = explode('/', $pwd);
array_pop($pwdParts);
$pwd = implode('/', $pwdParts);
return $pwd;
}
private function getAllPossiblePaths(Player $player) : array
{
$paths = [];
$paths[] = '/';
$paths[] = '/var';
$paths[] = '/var/arrest';
$paths[] = '/var/www';
$paths[] = '/var/marriage';
$paths[] = '/var/rapports';
$paths[] = '/var/linking';
$paths[] = '/etc';
$paths[] = '/etc/short';
$paths[] = '/etc/long';
$paths[] = '/etc/arrest';
$paths[] = '/etc/power';
$paths[] = '/etc/break';
$paths[] = '/etc/handle';
$paths[] = '/etc/freak';
$paths[] = '/etc/host';
$paths[] = '/home';
$playerNames = ['root', 'Luke', 'Charles', 'William', 'Peter'];
$players = $player->getSession()->getPlayers();
foreach($players as $player) {
$playerNames[] = $player->getUser()->getUsername();
}
$playerNames = array_unique($playerNames);
foreach($playerNames as $name) {
$paths[] = '/home/' . $name;
}
return $paths;
}
}