Skip to content

Commit

Permalink
Merge pull request #13 from milanstephan/master
Browse files Browse the repository at this point in the history
Add `nmode` IRC- and game-commands
  • Loading branch information
JAJames committed Jul 16, 2020
2 parents 5f9d58e + f06fdaf commit 08a6699
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 0 deletions.
87 changes: 87 additions & 0 deletions src/Plugins/RenX/RenX.Commands/RenX_Commands.cpp
Expand Up @@ -3190,6 +3190,56 @@ const Jupiter::ReadableString &TeamChange2IRCCommand::getHelp(const Jupiter::Rea

IRC_COMMAND_INIT(TeamChange2IRCCommand)

// NMode IRC Command

void NModeIRCCommand::create()
{
this->addTrigger(STRING_LITERAL_AS_REFERENCE("nmode"));
this->setAccessLevel(2);
}

void NModeIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString &parameters)
{
if (parameters.isEmpty()) {
source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Too Few Parameters. Syntax: nmode <Player>"));
return;
}

Jupiter::IRC::Client::Channel *chan = source->getChannel(channel);
if (chan == nullptr) {
return;
}

Jupiter::ArrayList<RenX::Server> servers = RenX::getCore()->getServers(chan->getType());
if (servers.size() == 0) {
source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Channel not attached to any connected Renegade X servers."));
return;
}

RenX::PlayerInfo *player;
RenX::Server *server;
unsigned int nmodes = 0;
for (size_t i = 0; i != servers.size(); i++) {
server = servers.get(i);
if (server != nullptr) {
player = server->getPlayerByPartName(parameters);
if (player != nullptr) {
server->nmodePlayer(*player);
++nmodes;
}
}
}
source->sendMessage(channel, Jupiter::StringS::Format("%u players nmoded.", nmodes));
}

const Jupiter::ReadableString &NModeIRCCommand::getHelp(const Jupiter::ReadableString &)
{
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Resets a player's mode from spectator to normal. Syntax: nmode <player>");
return defaultHelp;
}

IRC_COMMAND_INIT(NModeIRCCommand)

/** Game Commands */

// Help Game Command
Expand Down Expand Up @@ -3995,6 +4045,43 @@ const Jupiter::ReadableString &PhaseBotsGameCommand::getHelp(const Jupiter::Read

GAME_COMMAND_INIT(PhaseBotsGameCommand)

// NMode Game Command

void NModeGameCommand::create()
{
this->addTrigger(STRING_LITERAL_AS_REFERENCE("nmode"));
this->setAccessLevel(1);
}

void NModeGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, const Jupiter::ReadableString &parameters)
{
if (parameters.isEmpty()) {
source->sendMessage(*player, "Error: Too few parameters. Syntax: nmode <player-name>"_jrs);
return;
}

RenX::PlayerInfo *target = source->getPlayerByPartName(parameters);
if (target == nullptr) {
source->sendMessage(*player, "Error: Player not found."_jrs);
return;
}

if (!source->nmodePlayer(*target)) {
source->sendMessage(*player, "Error: Could not set player's mode."_jrs);
return;
}

source->sendMessage(*player, "Player's mode has been reset."_jrs);
}

const Jupiter::ReadableString &NModeGameCommand::getHelp(const Jupiter::ReadableString &)
{
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Resets a player's mode from spectator to normal. Syntax: nmode <player-name>");
return defaultHelp;
}

GAME_COMMAND_INIT(NModeGameCommand)

extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin()
{
return &pluginInstance;
Expand Down
2 changes: 2 additions & 0 deletions src/Plugins/RenX/RenX.Commands/RenX_Commands.h
Expand Up @@ -103,6 +103,7 @@ GENERIC_IRC_COMMAND(RCONIRCCommand)
GENERIC_IRC_COMMAND(RefundIRCCommand)
GENERIC_IRC_COMMAND(TeamChangeIRCCommand)
GENERIC_IRC_COMMAND(TeamChange2IRCCommand)
GENERIC_IRC_COMMAND(NModeIRCCommand)

GENERIC_GAME_COMMAND(HelpGameCommand)
GENERIC_GAME_COMMAND(ModsGameCommand)
Expand All @@ -123,5 +124,6 @@ GENERIC_GAME_COMMAND(KickBanGameCommand)
GENERIC_GAME_COMMAND(AddBotsGameCommand)
GENERIC_GAME_COMMAND(KillBotsGameCommand)
GENERIC_GAME_COMMAND(PhaseBotsGameCommand)
GENERIC_GAME_COMMAND(NModeGameCommand)

#endif // _RENX_COMMANDS_H_HEADER
5 changes: 5 additions & 0 deletions src/Plugins/RenX/RenX.Core/RenX_Server.cpp
Expand Up @@ -959,6 +959,11 @@ bool RenX::Server::changeTeam(RenX::PlayerInfo &player, bool resetCredits)
return RenX::Server::changeTeam(player.id, resetCredits);
}

bool RenX::Server::nmodePlayer(const RenX::PlayerInfo &player)
{
return RenX::Server::send(Jupiter::StringS::Format("nmode pid%d", player.id));
}

const Jupiter::ReadableString &RenX::Server::getPrefix() const
{
static Jupiter::String parsed;
Expand Down
8 changes: 8 additions & 0 deletions src/Plugins/RenX/RenX.Core/RenX_Server.h
Expand Up @@ -698,6 +698,14 @@ namespace RenX
*/
bool changeTeam(RenX::PlayerInfo &player, bool resetCredits = true);

/**
* @brief Changes a player's mode from spectator to normal
*
* @param player Player to change mode
* @return True on success, false otherwise.
*/
bool nmodePlayer(const RenX::PlayerInfo &player);

/**
* @brief Fetches a server's IRC logging prefix.
*
Expand Down

0 comments on commit 08a6699

Please sign in to comment.