From 2fa480854e2e5b9bf2a9f2fb4553dd0b0a8b24f0 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Thu, 26 Mar 2015 21:06:00 -0400 Subject: [PATCH] Added disarm(), disarmC4(), and disarmBeacon() functions to RenX::Server; Added "Kill", "Disarm", "DisarmC4", and "DisarmBeacon" IRC commands. --- Release/Plugins/RenX.Core.lib | Bin 107830 -> 109770 bytes RenX.Commands/RenX_Commands.cpp | 198 ++++++++++++++++++++++++++++++++ RenX.Commands/RenX_Commands.h | 6 +- RenX.Core/RenX_Server.cpp | 30 +++++ RenX.Core/RenX_Server.h | 48 ++++++++ 5 files changed, 281 insertions(+), 1 deletion(-) diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index b5ec07e71fd4c87e39921e69e37b88d604de40d3..686455ea1f34a42c993038f6285de16ae028df97 100644 GIT binary patch delta 11952 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 delta 11052 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"kill")); + this->setAccessLevel(2); +} + +void KillIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) +{ + if (parameters.isEmpty() == false) + { + Jupiter::IRC::Client::Channel *chan = source->getChannel(channel); + if (chan != nullptr) + { + int type = chan->getType(); + RenX::PlayerInfo *player; + bool match = false; + for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) + { + RenX::Server *server = RenX::getCore()->getServer(i); + if (server->isLogChanType(type)) + { + match = true; + player = server->getPlayerByPartName(parameters); + if (player != nullptr) + { + if (server->kill(player) == false) + source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Server does not support muting players.")); + } + else + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); + } + } + if (match == false) + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Channel not attached to any connected Renegade X servers.")); + } + } + else source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Too Few Parameters. Syntax: kill ")); +} + +const Jupiter::ReadableString &KillIRCCommand::getHelp(const Jupiter::ReadableString &) +{ + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Kills a player. Syntax: kill "); + return defaultHelp; +} + +IRC_COMMAND_INIT(KillIRCCommand) + +// Disarm IRC Command + +void DisarmIRCCommand::create() +{ + this->addTrigger(STRING_LITERAL_AS_REFERENCE("disarm")); + this->setAccessLevel(2); +} + +void DisarmIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) +{ + if (parameters.isEmpty() == false) + { + Jupiter::IRC::Client::Channel *chan = source->getChannel(channel); + if (chan != nullptr) + { + int type = chan->getType(); + RenX::PlayerInfo *player; + bool match = false; + for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) + { + RenX::Server *server = RenX::getCore()->getServer(i); + if (server->isLogChanType(type)) + { + match = true; + player = server->getPlayerByPartName(parameters); + if (player != nullptr) + { + if (server->disarm(player) == false) + source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Server does not support muting players.")); + } + else + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); + } + } + if (match == false) + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Channel not attached to any connected Renegade X servers.")); + } + } + else source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Too Few Parameters. Syntax: disarm ")); +} + +const Jupiter::ReadableString &DisarmIRCCommand::getHelp(const Jupiter::ReadableString &) +{ + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Disarms all of a player's deployed objects. Syntax: disarm "); + return defaultHelp; +} + +IRC_COMMAND_INIT(DisarmIRCCommand) + +// DisarmC4 IRC Command + +void DisarmC4IRCCommand::create() +{ + this->addTrigger(STRING_LITERAL_AS_REFERENCE("disarmc4")); + this->setAccessLevel(2); +} + +void DisarmC4IRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) +{ + if (parameters.isEmpty() == false) + { + Jupiter::IRC::Client::Channel *chan = source->getChannel(channel); + if (chan != nullptr) + { + int type = chan->getType(); + RenX::PlayerInfo *player; + bool match = false; + for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) + { + RenX::Server *server = RenX::getCore()->getServer(i); + if (server->isLogChanType(type)) + { + match = true; + player = server->getPlayerByPartName(parameters); + if (player != nullptr) + { + if (server->disarmC4(player) == false) + source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Server does not support muting players.")); + } + else + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); + } + } + if (match == false) + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Channel not attached to any connected Renegade X servers.")); + } + } + else source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Too Few Parameters. Syntax: disarmC4 ")); +} + +const Jupiter::ReadableString &DisarmC4IRCCommand::getHelp(const Jupiter::ReadableString &) +{ + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Disarms all of a player's deployed C4s. Syntax: disarmc4 "); + return defaultHelp; +} + +IRC_COMMAND_INIT(DisarmC4IRCCommand) + +// DisarmBeacon IRC Command + +void DisarmBeaconIRCCommand::create() +{ + this->addTrigger(STRING_LITERAL_AS_REFERENCE("disarmb")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("disarmbeacon")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("disarmbeacons")); + this->setAccessLevel(2); +} + +void DisarmBeaconIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) +{ + if (parameters.isEmpty() == false) + { + Jupiter::IRC::Client::Channel *chan = source->getChannel(channel); + if (chan != nullptr) + { + int type = chan->getType(); + RenX::PlayerInfo *player; + bool match = false; + for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) + { + RenX::Server *server = RenX::getCore()->getServer(i); + if (server->isLogChanType(type)) + { + match = true; + player = server->getPlayerByPartName(parameters); + if (player != nullptr) + { + if (server->disarmBeacon(player) == false) + source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Server does not support muting players.")); + } + else + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); + } + } + if (match == false) + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Channel not attached to any connected Renegade X servers.")); + } + } + else source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Too Few Parameters. Syntax: disarmb ")); +} + +const Jupiter::ReadableString &DisarmBeaconIRCCommand::getHelp(const Jupiter::ReadableString &) +{ + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Disarms all of a player's deployed beacons. Syntax: disarmb "); + return defaultHelp; +} + +IRC_COMMAND_INIT(DisarmBeaconIRCCommand) + // Kick IRC Command void KickIRCCommand::create() diff --git a/RenX.Commands/RenX_Commands.h b/RenX.Commands/RenX_Commands.h index 4e3052f..1d0d6de 100644 --- a/RenX.Commands/RenX_Commands.h +++ b/RenX.Commands/RenX_Commands.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -71,6 +71,10 @@ GENERIC_IRC_COMMAND(GameOverIRCCommand) GENERIC_IRC_COMMAND(SetMapIRCCommand) GENERIC_IRC_COMMAND(MuteIRCCommand) GENERIC_IRC_COMMAND(UnMuteIRCCommand) +GENERIC_IRC_COMMAND(KillIRCCommand) +GENERIC_IRC_COMMAND(DisarmIRCCommand) +GENERIC_IRC_COMMAND(DisarmC4IRCCommand) +GENERIC_IRC_COMMAND(DisarmBeaconIRCCommand) GENERIC_IRC_COMMAND(KickIRCCommand) GENERIC_IRC_COMMAND(TempBanIRCCommand) GENERIC_IRC_COMMAND(KickBanIRCCommand) diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index 6840eca..572bc31 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -422,6 +422,36 @@ bool RenX::Server::kill(RenX::PlayerInfo *player) return RenX::Server::kill(player->id); } +bool RenX::Server::disarm(int id) +{ + return RenX::Server::send(Jupiter::StringS::Format("disarm pid%d", id)) > 0; +} + +bool RenX::Server::disarm(RenX::PlayerInfo *player) +{ + return RenX::Server::disarm(player->id); +} + +bool RenX::Server::disarmC4(int id) +{ + return RenX::Server::send(Jupiter::StringS::Format("disarmc4 pid%d", id)) > 0; +} + +bool RenX::Server::disarmC4(RenX::PlayerInfo *player) +{ + return RenX::Server::disarmC4(player->id); +} + +bool RenX::Server::disarmBeacon(int id) +{ + return RenX::Server::send(Jupiter::StringS::Format("disarmb pid%d", id)) > 0; +} + +bool RenX::Server::disarmBeacon(RenX::PlayerInfo *player) +{ + return RenX::Server::disarmBeacon(player->id); +} + bool RenX::Server::changeTeam(int id, bool resetCredits) { return RenX::Server::send(Jupiter::StringS::Format(resetCredits ? "team pid%d" : "team2 pid%d", id)) > 0; diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index 54ed895..a1500a1 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -387,6 +387,54 @@ namespace RenX */ bool kill(RenX::PlayerInfo *player); + /** + * @brief Disarms all of a player's deployed objects. + * + * @param id ID of the player to disarm + * @return True on success, false otherwise. + */ + bool disarm(int id); + + /** + * @brief Disarms all of a player's deployed objects. + * + * @param player Player to disarm + * @return True on success, false otherwise. + */ + bool disarm(RenX::PlayerInfo *player); + + /** + * @brief Disarms all of a player's deployed C4. + * + * @param id ID of the player to disarm + * @return True on success, false otherwise. + */ + bool disarmC4(int id); + + /** + * @brief Disarms all of a player's deployed C4. + * + * @param player Player to disarm + * @return True on success, false otherwise. + */ + bool disarmC4(RenX::PlayerInfo *player); + + /** + * @brief Disarms all of a player's deployed beacons. + * + * @param id ID of the player to disarm + * @return True on success, false otherwise. + */ + bool disarmBeacon(int id); + + /** + * @brief Disarms all of a player's deployed beacons. + * + * @param player Player to disarm + * @return True on success, false otherwise. + */ + bool disarmBeacon(RenX::PlayerInfo *player); + /** * @brief Forces a player to change teams. *