diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index 325f671..0e5fb8b 100644 Binary files a/Release/Plugins/RenX.Core.lib and b/Release/Plugins/RenX.Core.lib differ diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index 914794c..e03994a 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -597,6 +597,11 @@ time_t RenX::Server::getDelay() const return RenX::Server::delay; } +bool RenX::Server::isPassworded() const +{ + return RenX::Server::passworded; +} + const Jupiter::ReadableString &RenX::Server::getPassword() const { return RenX::Server::pass; @@ -1403,6 +1408,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) buff.shiftRight(1); this->port = static_cast(buff.getToken(1, RenX::DelimC).asUnsignedInt(10)); this->serverName = buff.getToken(3, RenX::DelimC); + this->passworded = buff.getToken(5, RenX::DelimC).asBool(); this->map = buff.getToken(7, RenX::DelimC); buff.shiftLeft(1); } @@ -1816,6 +1822,16 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) break; case RenX::ObjectType::Building: player->buildingKills++; + { + auto internalsStr = "_Internals"_jrs; + RenX::BuildingInfo *building; + if (objectName.findi(internalsStr) != Jupiter::INVALID_INDEX) + objectName.truncate(internalsStr.size()); + building = RenX::Server::getBuildingByName(objectName); + if (building != nullptr) + building->health = 0.0; + } + break; case RenX::ObjectType::Defence: player->defenceKills++; diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index 9101623..d56b640 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -580,7 +580,14 @@ namespace RenX time_t getDelay() const; /** - * @brief Fetches the password of a server. + * @brief Checks if the server has a game password. + * + * @return True if the game is passworded, false otherwise. + */ + bool isPassworded() const; + + /** + * @brief Fetches the RCON password of a server. * * @return String containing the password of the server. */ @@ -806,6 +813,7 @@ namespace RenX /** Tracking variables */ bool connected = false; bool seamless = false; + bool passworded = false; bool needsCList = false; bool silenceParts = false; bool silenceJoins = false; diff --git a/RenX.Core/RenX_Tags.cpp b/RenX.Core/RenX_Tags.cpp index 07d308e..84ad5dd 100644 --- a/RenX.Core/RenX_Tags.cpp +++ b/RenX.Core/RenX_Tags.cpp @@ -56,7 +56,7 @@ TagsImp::TagsImp() this->uniqueTag = STRING_LITERAL_AS_REFERENCE("\0\0\0\0\0\0"); const Jupiter::ReadableString &configSection = Jupiter::IRC::Client::Config->get(STRING_LITERAL_AS_REFERENCE("RenX"), STRING_LITERAL_AS_REFERENCE("TagDefinitions"), STRING_LITERAL_AS_REFERENCE("RenX.Tags")); - TagsImp::bar_width = Jupiter::IRC::Client::Config->getInt(configSection, STRING_LITERAL_AS_REFERENCE("BarWidth"), 20); + TagsImp::bar_width = Jupiter::IRC::Client::Config->getInt(configSection, STRING_LITERAL_AS_REFERENCE("BarWidth"), 19); /** Global formats */ this->dateFmt = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("DateFormat"), STRING_LITERAL_AS_REFERENCE("%A, %B %d, %Y")); @@ -289,17 +289,27 @@ Jupiter::StringS TagsImp::get_building_health_bar(const RenX::BuildingInfo *buil Jupiter::String r(TagsImp::bar_width); if (greenBars != 0) { - r = IRCCOLOR "09,09"; + r = IRCCOLOR "02,09"; do - r += " "; + { + if (index % 2 == 0) + r += '/'; + else + r += ' '; + } while (++index != greenBars); - if (greenBars == TagsImp::bar_width) + if (index == TagsImp::bar_width) return r += IRCNORMAL; } - r += IRCCOLOR "04,04"; + r += IRCCOLOR "02,04"; do - r += " "; - while (++greenBars != TagsImp::bar_width); + { + if (index % 2 == 0) + r += '\\'; + else + r += ' '; + } + while (++index != TagsImp::bar_width); return r += IRCNORMAL; } diff --git a/RenX.IRCJoin/RenX_IRCJoin.cpp b/RenX.IRCJoin/RenX_IRCJoin.cpp index 237d05a..3e7d7a1 100644 --- a/RenX.IRCJoin/RenX_IRCJoin.cpp +++ b/RenX.IRCJoin/RenX_IRCJoin.cpp @@ -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 @@ -27,8 +27,6 @@ void RenX_IRCJoinPlugin::init() RenX_IRCJoinPlugin::publicOnly = Jupiter::IRC::Client::Config->getBool(this->getName(), STRING_LITERAL_AS_REFERENCE("PublicOnly"), true); RenX_IRCJoinPlugin::joinMsgAlways = Jupiter::IRC::Client::Config->getBool(this->getName(), STRING_LITERAL_AS_REFERENCE("Join.MsgAlways"), false); RenX_IRCJoinPlugin::partMsgAlways = Jupiter::IRC::Client::Config->getBool(this->getName(), STRING_LITERAL_AS_REFERENCE("Part.MsgAlways"), false); - RenX_IRCJoinPlugin::minAccessJoinMessage = Jupiter::IRC::Client::Config->getInt(this->getName(), STRING_LITERAL_AS_REFERENCE("Join.MinAccess"), 0); - RenX_IRCJoinPlugin::maxAccessJoinMessage = Jupiter::IRC::Client::Config->getInt(this->getName(), STRING_LITERAL_AS_REFERENCE("Join.MaxAccess"), -1); RenX_IRCJoinPlugin::minAccessPartMessage = Jupiter::IRC::Client::Config->getInt(this->getName(), STRING_LITERAL_AS_REFERENCE("Part.MinAccess"), 0); RenX_IRCJoinPlugin::maxAccessPartMessage = Jupiter::IRC::Client::Config->getInt(this->getName(), STRING_LITERAL_AS_REFERENCE("Part.MaxAccess"), -1); RenX_IRCJoinPlugin::nameTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("NameTag"), STRING_LITERAL_AS_REFERENCE("{NAME}")); @@ -41,13 +39,10 @@ void RenX_IRCJoinPlugin::init() void RenX_IRCJoinPlugin::OnJoin(Jupiter::IRC::Client *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick) { - int access = source->getAccessLevel(channel, nick); - - if (access >= RenX_IRCJoinPlugin::minAccessJoinMessage && (RenX_IRCJoinPlugin::maxAccessJoinMessage == -1 || access <= RenX_IRCJoinPlugin::maxAccessJoinMessage)) + if (RenX_IRCJoinPlugin::joinFmt.isNotEmpty()) { RenX::Server *server; int type = source->getChannel(channel)->getType(); - Jupiter::String msg = RenX_IRCJoinPlugin::joinFmt; msg.replace(RenX_IRCJoinPlugin::nameTag, nick); msg.replace(RenX_IRCJoinPlugin::chanTag, channel); @@ -70,34 +65,37 @@ void RenX_IRCJoinPlugin::OnJoin(Jupiter::IRC::Client *source, const Jupiter::Rea void RenX_IRCJoinPlugin::OnPart(Jupiter::IRC::Client *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString &reason) { - int access = source->getAccessLevel(channel, nick); - - if (access >= RenX_IRCJoinPlugin::minAccessPartMessage && (RenX_IRCJoinPlugin::maxAccessPartMessage == -1 || access <= RenX_IRCJoinPlugin::maxAccessPartMessage)) + if (RenX_IRCJoinPlugin::partFmt.isNotEmpty()) { - RenX::Server *server; - int type = source->getChannel(channel)->getType(); + int access = source->getAccessLevel(channel, nick); - Jupiter::String msg; - if (reason.isEmpty()) - msg = RenX_IRCJoinPlugin::partFmtNoReason; - else - msg = RenX_IRCJoinPlugin::partFmt; - msg.replace(RenX_IRCJoinPlugin::nameTag, nick); - msg.replace(RenX_IRCJoinPlugin::chanTag, channel); - msg.replace(RenX_IRCJoinPlugin::partReasonTag, reason); - - auto checkType = [&]() + if (access >= RenX_IRCJoinPlugin::minAccessPartMessage && (RenX_IRCJoinPlugin::maxAccessPartMessage == -1 || access <= RenX_IRCJoinPlugin::maxAccessPartMessage)) { - if (this->publicOnly) - return server->isPublicLogChanType(type); + RenX::Server *server; + int type = source->getChannel(channel)->getType(); + + Jupiter::String msg; + if (reason.isEmpty()) + msg = RenX_IRCJoinPlugin::partFmtNoReason; else - return server->isLogChanType(type); - }; - for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) - { - server = RenX::getCore()->getServer(i); - if (checkType() && (RenX_IRCJoinPlugin::partMsgAlways || server->players.size() != 0)) - server->sendMessage(msg); + msg = RenX_IRCJoinPlugin::partFmt; + msg.replace(RenX_IRCJoinPlugin::nameTag, nick); + msg.replace(RenX_IRCJoinPlugin::chanTag, channel); + msg.replace(RenX_IRCJoinPlugin::partReasonTag, reason); + + auto checkType = [&]() + { + if (this->publicOnly) + return server->isPublicLogChanType(type); + else + return server->isLogChanType(type); + }; + for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) + { + server = RenX::getCore()->getServer(i); + if (checkType() && (RenX_IRCJoinPlugin::partMsgAlways || server->players.size() != 0)) + server->sendMessage(msg); + } } } } diff --git a/RenX.IRCJoin/RenX_IRCJoin.h b/RenX.IRCJoin/RenX_IRCJoin.h index 444509a..adaf7d6 100644 --- a/RenX.IRCJoin/RenX_IRCJoin.h +++ b/RenX.IRCJoin/RenX_IRCJoin.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 @@ -33,11 +33,11 @@ public: // Jupiter::Plugin private: void init(); + + // Config Variables bool publicOnly; bool joinMsgAlways; bool partMsgAlways; - int minAccessJoinMessage; - int maxAccessJoinMessage; int minAccessPartMessage; int maxAccessPartMessage; Jupiter::StringS nameTag; @@ -46,6 +46,8 @@ private: Jupiter::StringS joinFmt; Jupiter::StringS partFmt; Jupiter::StringS partFmtNoReason; + + // Internal Variables STRING_LITERAL_AS_NAMED_REFERENCE(name, "RenX.IRCJoin"); };