dsg/squad-rcon-php


README

Squad RCON PHP Logo

Squad RCON PHP

Squad服务器管理的RCON PHP包装器

Deutsche Squad Gemeinschaft Deutsche Squad Gemeinschaft Total Downloads Latest Stable Version Latest Unstable Version License
Deutsche Squad Gemeinschaft Discord

加入Squad RCON社区

如果您有任何问题或需要帮助在OWI游戏中开始使用RCON,请确保加入Discord上的Squad RCON社区

安装

您可以通过Composer和以下命令安装此包

composer require dsg/squad-rcon-php

然后代码将在DSG\SquadRCON命名空间下可用。

命令

  • ListPlayers
  • ListSquads
  • AdminListDisconnectedPlayers
  • ShowCurrentMap
  • ShowNextMap
  • AdminKick "<NameOrSteamId>" <KickReason>
  • AdminKickById <PlayerId> <KickReason>
  • AdminBan "<NameOrSteamId>" "<BanLength>" <BanReason>
  • AdminBanById <PlayerId> "<BanLength>" <BanReason>
  • AdminBroadcast <Message>
  • AdminRestartMatch
  • AdminEndMatch
  • AdminChangeLevel <LevelName>
  • AdminSetNextLevel <LevelName>
  • AdminChangeLayer <LayerName>
  • AdminSetNextLayer <LayerName>
  • AdminSetMaxNumPlayers <NumPlayers>
  • AdminSetServerPassword <Password>
  • AdminSlomo <TimeDilation>
  • AdminForceTeamChange <NameOrSteamId>
  • AdminForceTeamChangeById <PlayerId>
  • AdminDemoteCommander <PlayerName>
  • AdminDemoteCommanderById <PlayerId>
  • AdminDisbandSquad <TeamId> <SquadId>
  • AdminRemovePlayerFromSquad <PlayerName>
  • AdminRemovePlayerFromSquadById <PlayerId>
  • AdminWarn <NameOrSteamId> <WarnReason>
  • AdminWarnById <PlayerId> <WarnReason>
  • AdminVoteLevel <Choices, concatenated by +>
  • AdminVoteLayer <Choices, concatenated by +>
  • AdminVoteNextLevel <Choices, concatenated by +>
  • AdminVoteNextLayer <Choices, concatenated by +>
  • AdminVote <Vote name> <Choices, concatenated by +>

用法

创建实例

实例化SquadServer类以打开新的RCON连接。如果无法建立连接,则会抛出异常。

use DSG\SquadRCON\SquadServer;

...

/** @var SquadServer */
$server = new SquadServer(new ServerConnectionInfo(
    host: '127.0.0.1',
    port: 21114,
    password: 'YourRconPassword'
));

获取当前服务器人口(队伍、小队、玩家)

获取当前人口。这确实使用ListPlayers & ListSquads来获取正确排序的队伍、小队和玩家。

/** @var Population */
$population = $server->serverPopulation();

/** @var Team[] */
$teams = $population->getTeams();

foreach ($teams as $team) {
    $name = $team->getName();
    
    foreach ($team->getSquads() as $squad) {
        $creatorName = $squad->getCreatorName();
        $creatorSteamId = $squad->getCreatorSteamId();
        
        foreach ($squad->getPlayers() as $player) {
            $name = $player->getName();
            $steamId = $player->getSteamId();
        }
    }
    
    foreach ($team->getPlayers() as $unassigned) {
        $name = $player->getName();
        $steamId = $player->getSteamId();
    }
}

// or

/** @var Player[] */
$players = $population->getPlayers();

// or

/** @var Player|null */
$player = $population->getPlayerBySteamId('76561197960287930');

ListPlayers

使用ListPlayers命令获取当前玩家列表。不包括断开连接的玩家。

/** @var Player[] */
$players = $server->listPlayers();

获取断开连接的玩家

使用ListPlayers命令获取断开连接的玩家。

/** @var Player[] */
$players = $server->listDisconnectedPlayers();

ListSquads

获取当前活跃的小队(和队伍)

/** @var Team[] */
$teams = $server->listSquads();

AdminKick

通过名称、SteamId或游戏内ID踢出玩家。

/** @var bool */
$success = $server->adminKick('76561197960287930', 'Reason');

// or

/** @var bool */
$success = $server->adminKickById($player->getId(), 'Reason');

AdminBan

通过名称、SteamId或游戏内ID禁止玩家。

/** @var bool */
$success = $server->adminBan('76561197960287930', '1h', 'Reason');

// or

/** @var bool */
$success = $server->adminBanById($player->getId(), '1h', 'Reason');

获取当前地图

使用ShowNextMap命令获取当前地图

/** @var array */
$map = $server->showCurrentMap();
echo $map['level'];
echo $map['layer'];

获取下一个地图

使用ShowNextMap命令获取下一个地图

/** @var array */
$map = $server->showNextMap();
echo $map['level'];
echo $map['layer'];

AdminRestartMatch

重启当前比赛

/** @var bool */
$success = $server->adminRestartMatch();

AdminEndMatch

结束当前比赛

/** @var bool */
$success = $server->adminEndMatch();

AdminBroadcast

向服务器上的所有玩家广播消息

/** @var bool */
$success = $server->adminBroadcast('Hello from the other side');

AdminChangeLevel

更改级别(并在其上选择一个随机层)并立即前往该层

/** @var bool */
$success = $server->adminChangeLevel('Sumari');

AdminSetNextLevel

设置下一个级别(并在其上选择一个随机层)在比赛结束后前往

/** @var bool */
$success = $server->adminSetNextLevel('Sumari');

AdminChangeLayer

更改层并立即前往该层

/** @var bool */
$success = $server->adminChangeLayer('Sumari AAS v1');

AdminSetNextLayer

设置比赛结束后要前往的下一个层

/** @var bool */
$success = $server->adminSetNextLayer('Sumari AAS v1');

AdminSetMaxNumPlayers

设置玩家/槽位数量的最大值

/** @var bool */
$success = $server->adminSetMaxNumPlayers(80);

AdminSetServerPassword

设置服务器密码

/** @var bool */
$success = $server->adminSetServerPassword('secret');

AdminSlomo

使用AdminSlomo设置游戏速度。默认为1.0

/** @var bool */
$success = $server->adminSlomo(1.5);

AdminForceTeamChange

通过提供名称或SteamId强制玩家进入对方队伍。

/** @var bool */
$success = $server->adminForceTeamChange('Name or SteamId');

AdminForceTeamChangeById

通过提供游戏内玩家ID,强制将玩家分配到对方队伍。

/** @var bool */
$success = $server->adminForceTeamChangeById($player->getId());

AdminDisbandSquad命令。

通过提供队伍ID/索引和小组ID/索引来解散小组。

/** @var bool */
$success = $server->adminDisbandSquad($team->getId(), $squad->getId());

AdminRemovePlayerFromSquad

通过提供玩家名称,从其小组中移除玩家。

/** @var bool */
$success = $server->adminRemovePlayerFromSquad('Name');

AdminRemovePlayerFromSquadById

通过提供游戏内玩家ID,从其小组中移除玩家。

/** @var bool */
$success = $server->adminRemovePlayerFromSquadById($player->getId());

AdminWarn

通过提供玩家的名称/steamid和消息来警告玩家。

/** @var bool */
$success = $server->adminWarn('Name or SteamId', 'Warn Reason');

AdminWarnById

通过ID警告玩家。

/** @var bool */
$success = $server->adminWarnById($player->getId(), 'Warn Reason');

重要提示

请确保始终手动关闭连接或通过销毁对象触发断开连接,以防止使用所有可用的连接阻塞RCON服务器。

$server->disconnect();
// Or
unset($server);

特别感谢

  • SquadSlovenia(初始创建者)
  • Brozowski(主要贡献者)
  • [ToG] subtlerod(对使用的SquadRcon实现做出重大贡献)
  • Thomas Smyth(SquadJS的创建者,Squad RCON的优秀资源)