From 0d3991ab666dff793a7d92b617fd77ab30993297 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Thu, 5 Feb 2015 19:57:23 -0500 Subject: [PATCH] Added TeamChangeIRCCommand and TeamChange2IRCCommand. --- RenX.Commands/RenX_Commands.cpp | 122 ++++++++++++++++++++++++++++++-- RenX.Commands/RenX_Commands.h | 2 + 2 files changed, 118 insertions(+), 6 deletions(-) diff --git a/RenX.Commands/RenX_Commands.cpp b/RenX.Commands/RenX_Commands.cpp index 59302c0..fd8b97e 100644 --- a/RenX.Commands/RenX_Commands.cpp +++ b/RenX.Commands/RenX_Commands.cpp @@ -1312,15 +1312,15 @@ void AddBotsIRCCommand::create() void AddBotsIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) { - if (parameters.size() != 0) - { Jupiter::IRC::Client::Channel *chan = source->getChannel(channel); if (chan != nullptr) { Jupiter::ArrayList servers = RenX::getCore()->getServers(source->getChannel(channel)->getType()); if (servers.size() != 0) { - int amount = parameters.asInt(); + int amount = 1; + if (parameters.isEmpty() == false) + amount = parameters.asInt(); if (amount != 0) { RenX::Server *server; @@ -1357,13 +1357,11 @@ void AddBotsIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString & } else source->sendMessage(channel, 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: AddBots [Team]")); } const Jupiter::ReadableString &AddBotsIRCCommand::getHelp(const Jupiter::ReadableString &) { - static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Adds bots to the game. Syntax: AddBots [Team]"); + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Adds bots to the game. Syntax: AddBots [Amount=1] [Team]"); return defaultHelp; } @@ -1553,6 +1551,118 @@ const Jupiter::ReadableString &RefundIRCCommand::getHelp(const Jupiter::Readable IRC_COMMAND_INIT(RefundIRCCommand) +// Team-Change IRC Command + +void TeamChangeIRCCommand::create() +{ + this->addTrigger(STRING_LITERAL_AS_REFERENCE("team")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("tc")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("ftc")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("forcetc")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("teamchange")); + this->setAccessLevel(3); +} + +void TeamChangeIRCCommand::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(); + Jupiter::ReferenceString playerName = Jupiter::ReferenceString::getWord(parameters, 0, WHITESPACE); + double credits = Jupiter::ReferenceString::getWord(parameters, 1, WHITESPACE).asDouble(); + RenX::PlayerInfo *player; + bool playerFound = false; + for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) + { + RenX::Server *server = RenX::getCore()->getServer(i); + if (server->isLogChanType(type) && server->players.size() != 0) + { + for (Jupiter::DLList::Node *node = server->players.getNode(0); node != nullptr; node = node->next) + { + player = node->data; + if (player->name.findi(playerName) != Jupiter::INVALID_INDEX) + { + playerFound = true; + if (server->changeTeam(player) == false) + source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Server does not support team changing.")); + } + } + } + } + if (playerFound == false) + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); + } + } + else source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Too Few Parameters. Syntax: team ")); +} + +const Jupiter::ReadableString &TeamChangeIRCCommand::getHelp(const Jupiter::ReadableString &) +{ + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Changes a player's team. Syntax: team "); + return defaultHelp; +} + +IRC_COMMAND_INIT(TeamChangeIRCCommand) + +// TeamChange2 IRC Command + +void TeamChange2IRCCommand::create() +{ + this->addTrigger(STRING_LITERAL_AS_REFERENCE("team2")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("tc2")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("ftc2")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("forcetc2")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("teamchange2")); + this->setAccessLevel(3); +} + +void TeamChange2IRCCommand::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(); + Jupiter::ReferenceString playerName = Jupiter::ReferenceString::getWord(parameters, 0, WHITESPACE); + double credits = Jupiter::ReferenceString::getWord(parameters, 1, WHITESPACE).asDouble(); + RenX::PlayerInfo *player; + bool playerFound = false; + for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) + { + RenX::Server *server = RenX::getCore()->getServer(i); + if (server->isLogChanType(type) && server->players.size() != 0) + { + for (Jupiter::DLList::Node *node = server->players.getNode(0); node != nullptr; node = node->next) + { + player = node->data; + if (player->name.findi(playerName) != Jupiter::INVALID_INDEX) + { + playerFound = true; + if (server->changeTeam(player, 0x01) == false) + source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Server does not support team changing.")); + } + } + } + } + if (playerFound == false) + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); + } + } + else source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Too Few Parameters. Syntax: team2 ")); +} + +const Jupiter::ReadableString &TeamChange2IRCCommand::getHelp(const Jupiter::ReadableString &) +{ + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Changes a player's team, without resetting their credits. Syntax: team2 "); + return defaultHelp; +} + +IRC_COMMAND_INIT(TeamChange2IRCCommand) + /** Game Commands */ // Help Game Command diff --git a/RenX.Commands/RenX_Commands.h b/RenX.Commands/RenX_Commands.h index b6293c9..0e3df39 100644 --- a/RenX.Commands/RenX_Commands.h +++ b/RenX.Commands/RenX_Commands.h @@ -80,6 +80,8 @@ GENERIC_IRC_COMMAND(KillBotsIRCCommand) GENERIC_IRC_COMMAND(PhaseBotsIRCCommand) GENERIC_IRC_COMMAND(RCONIRCCommand) GENERIC_IRC_COMMAND(RefundIRCCommand) +GENERIC_IRC_COMMAND(TeamChangeIRCCommand) +GENERIC_IRC_COMMAND(TeamChange2IRCCommand) GENERIC_GAME_COMMAND(HelpGameCommand) GENERIC_GAME_COMMAND(ModsGameCommand)