From 262c79d7785419789de942f380afcc37e8dd9a42 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Sun, 7 Jun 2015 10:47:32 -0400 Subject: [PATCH] Added BuildingInfo tags. * Adjusted RenX_ProcessTags in RenX::Plugin accordingly. ** Updated Plugins accordingly. Changed BuildingInfo health/max_health type to double Added Rx_Building_ translations. Fixed binfo RCON command spam, and improved Server::updateClientList(). Updated Jupiter. --- Jupiter | 2 +- Release/Plugins/RenX.Core.lib | Bin 128188 -> 128368 bytes RenX.Core/RenX_BuildingInfo.h | 4 +- RenX.Core/RenX_Functions.cpp | 26 +++++++++++ RenX.Core/RenX_Plugin.cpp | 2 +- RenX.Core/RenX_Plugin.h | 3 +- RenX.Core/RenX_Server.cpp | 4 +- RenX.Core/RenX_Tags.cpp | 84 +++++++++++++++++++++++++++++++--- RenX.Core/RenX_Tags.h | 24 +++++++++- RenX.Medals/RenX_Medals.cpp | 2 +- RenX.Medals/RenX_Medals.h | 2 +- 11 files changed, 136 insertions(+), 17 deletions(-) diff --git a/Jupiter b/Jupiter index 5bb6f9e..6400a15 160000 --- a/Jupiter +++ b/Jupiter @@ -1 +1 @@ -Subproject commit 5bb6f9e45f2a41f6427ae43441ecb1aab3137c4c +Subproject commit 6400a1542e1d005e47cd5c9989a58a1731e00e27 diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index bca44312e4f9732cca64e46df3abf6e89f605989..3d0a62f5120c4113ebcc3e3dad1cff1556b5ba10 100644 GIT binary patch delta 12438 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 imv*`*yrinmnt>= 3) + if (RenX::Server::rconVersion >= 3 && RenX::Server::players.size() != 0) { if (RenX::Server::clientUpdateRate != std::chrono::milliseconds::zero() && std::chrono::steady_clock::now() > RenX::Server::lastClientListUpdate + RenX::Server::clientUpdateRate) RenX::Server::updateClientList(); @@ -380,8 +380,6 @@ bool RenX::Server::fetchClientList() bool RenX::Server::updateClientList() { RenX::Server::lastClientListUpdate = std::chrono::steady_clock::now(); - if (RenX::Server::players.size() == 0) - return true; size_t botCount = 0; for (size_t i = 0; i != RenX::Server::players.size(); i++) diff --git a/RenX.Core/RenX_Tags.cpp b/RenX.Core/RenX_Tags.cpp index 10f3553..07d308e 100644 --- a/RenX.Core/RenX_Tags.cpp +++ b/RenX.Core/RenX_Tags.cpp @@ -22,15 +22,17 @@ #include "RenX_Functions.h" #include "RenX_Server.h" #include "RenX_PlayerInfo.h" +#include "RenX_BuildingInfo.h" #include "RenX_Plugin.h" #include "RenX_Tags.h" struct TagsImp : RenX::Tags { TagsImp(); - void processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim); + void processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim, const RenX::BuildingInfo *building); void sanitizeTags(Jupiter::StringType &fmt); const Jupiter::ReadableString &getUniqueInternalTag(); + Jupiter::StringS get_building_health_bar(const RenX::BuildingInfo *building); private: Jupiter::StringS uniqueTag; union @@ -44,6 +46,7 @@ private: uint8_t tagItrP4; }; }; + size_t bar_width; } _tags; RenX::Tags *RenX::tags = &_tags; @@ -53,6 +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); /** Global formats */ this->dateFmt = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("DateFormat"), STRING_LITERAL_AS_REFERENCE("%A, %B %d, %Y")); @@ -147,6 +151,17 @@ TagsImp::TagsImp() this->INTERNAL_VICTIM_STOLEN_TAG = this->getUniqueInternalTag(); this->INTERNAL_VICTIM_ACCESS_TAG = this->getUniqueInternalTag(); + /** Building tags */ + this->INTERNAL_BUILDING_NAME_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_RAW_NAME_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_HEALTH_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_MAX_HEALTH_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_HEALTH_PERCENTAGE_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_HEALTH_BAR_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_TEAM_COLOR_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_TEAM_SHORT_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_TEAM_LONG_TAG = this->getUniqueInternalTag(); + /** Other tags */ this->INTERNAL_WEAPON_TAG = this->getUniqueInternalTag(); this->INTERNAL_OBJECT_TAG = this->getUniqueInternalTag(); @@ -244,6 +259,17 @@ TagsImp::TagsImp() this->victimStolenTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimStolenTag"), STRING_LITERAL_AS_REFERENCE("{VSTOLEN}")); this->victimAccessTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimAccessTag"), STRING_LITERAL_AS_REFERENCE("{VACCESS}")); + /** Building tags */ + this->buildingNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("BuildingNameTag"), STRING_LITERAL_AS_REFERENCE("{BNAME}")); + this->buildingRawNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("BuildingRawNameTag"), STRING_LITERAL_AS_REFERENCE("{BRNAME}")); + this->buildingHealthTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("BuildingHealthTag"), STRING_LITERAL_AS_REFERENCE("{BHEALTH}")); + this->buildingMaxHealthTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("BuildingMaxHealthTag"), STRING_LITERAL_AS_REFERENCE("{BMHEALTH}")); + this->buildingHealthPercentageTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("BuildingHealthPercentageTag"), STRING_LITERAL_AS_REFERENCE("{BHP}")); + this->buildingHealthBarTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("BuildingHealthBarTag"), STRING_LITERAL_AS_REFERENCE("{BHBAR}")); + this->buildingTeamColorTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("BuildingTeamColorTag"), STRING_LITERAL_AS_REFERENCE("{BCOLOR}")); + this->buildingTeamShortTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("BuildingShortTeamTag"), STRING_LITERAL_AS_REFERENCE("{BTEAMS}")); + this->buildingTeamLongTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("BuildingLongTeamTag"), STRING_LITERAL_AS_REFERENCE("{BTEAML}")); + /** Other tags */ this->weaponTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("WeaponTag"), STRING_LITERAL_AS_REFERENCE("{WEAPON}")); this->objectTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("ObjectTag"), STRING_LITERAL_AS_REFERENCE("{OBJECT}")); @@ -253,14 +279,37 @@ TagsImp::TagsImp() this->loseScoreTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("LoseScoreTag"), STRING_LITERAL_AS_REFERENCE("{LOSESCORE}")); } +Jupiter::StringS TagsImp::get_building_health_bar(const RenX::BuildingInfo *building) +{ + if (TagsImp::bar_width == 0) + return Jupiter::StringS::empty; + + size_t index = 0; + size_t greenBars = (building->health / building->max_health) * TagsImp::bar_width; + Jupiter::String r(TagsImp::bar_width); + if (greenBars != 0) + { + r = IRCCOLOR "09,09"; + do + r += " "; + while (++index != greenBars); + if (greenBars == TagsImp::bar_width) + return r += IRCNORMAL; + } + r += IRCCOLOR "04,04"; + do + r += " "; + while (++greenBars != TagsImp::bar_width); + return r += IRCNORMAL; +} + #define PROCESS_TAG(tag, value) \ while(true) { \ index = msg.find(tag); \ if (index == Jupiter::INVALID_INDEX) break; \ msg.replace(index, tag.size(), value); } - -void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim) +void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim, const RenX::BuildingInfo *building) { size_t index; PROCESS_TAG(this->INTERNAL_DATE_TAG, Jupiter::ReferenceString(getTimeFormat(this->dateFmt.c_str()))); @@ -357,10 +406,22 @@ void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, PROCESS_TAG(this->INTERNAL_VICTIM_STOLEN_TAG, Jupiter::StringS::Format("%u", victim->stolen)); PROCESS_TAG(this->INTERNAL_VICTIM_ACCESS_TAG, Jupiter::StringS::Format("%d", victim->access)); } + if (building != nullptr) + { + PROCESS_TAG(this->INTERNAL_BUILDING_NAME_TAG, RenX::translateName(building->name)); + PROCESS_TAG(this->INTERNAL_BUILDING_RAW_NAME_TAG, building->name); + PROCESS_TAG(this->INTERNAL_BUILDING_HEALTH_TAG, Jupiter::StringS::Format("%.0f", building->health)); + PROCESS_TAG(this->INTERNAL_BUILDING_MAX_HEALTH_TAG, Jupiter::StringS::Format("%.0f", building->health)); + PROCESS_TAG(this->INTERNAL_BUILDING_HEALTH_PERCENTAGE_TAG, Jupiter::StringS::Format("%.0f", (building->health / building->max_health) * 100.0)); + PROCESS_TAG(this->INTERNAL_BUILDING_HEALTH_BAR_TAG, get_building_health_bar(building)); + PROCESS_TAG(this->INTERNAL_BUILDING_TEAM_COLOR_TAG, RenX::getTeamColor(building->team)); + PROCESS_TAG(this->INTERNAL_BUILDING_TEAM_SHORT_TAG, RenX::getTeamName(building->team)); + PROCESS_TAG(this->INTERNAL_BUILDING_TEAM_LONG_TAG, RenX::getFullTeamName(building->team)); + } Jupiter::ArrayList &xPlugins = *RenX::getCore()->getPlugins(); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_ProcessTags(msg, server, player, victim); + xPlugins.get(i)->RenX_ProcessTags(msg, server, player, victim, building); } void TagsImp::sanitizeTags(Jupiter::StringType &fmt) @@ -452,6 +513,17 @@ void TagsImp::sanitizeTags(Jupiter::StringType &fmt) fmt.replace(this->victimStolenTag, this->INTERNAL_VICTIM_STOLEN_TAG); fmt.replace(this->victimAccessTag, this->INTERNAL_VICTIM_ACCESS_TAG); + /** Building tags */ + fmt.replace(this->buildingNameTag, this->INTERNAL_BUILDING_NAME_TAG); + fmt.replace(this->buildingRawNameTag, this->INTERNAL_BUILDING_RAW_NAME_TAG); + fmt.replace(this->buildingHealthTag, this->INTERNAL_BUILDING_HEALTH_TAG); + fmt.replace(this->buildingMaxHealthTag, this->INTERNAL_BUILDING_MAX_HEALTH_TAG); + fmt.replace(this->buildingHealthPercentageTag, this->INTERNAL_BUILDING_HEALTH_PERCENTAGE_TAG); + fmt.replace(this->buildingHealthBarTag, this->INTERNAL_BUILDING_HEALTH_BAR_TAG); + fmt.replace(this->buildingTeamColorTag, this->INTERNAL_BUILDING_TEAM_COLOR_TAG); + fmt.replace(this->buildingTeamShortTag, this->INTERNAL_BUILDING_TEAM_SHORT_TAG); + fmt.replace(this->buildingTeamLongTag, this->INTERNAL_BUILDING_TEAM_LONG_TAG); + /** Other tags */ fmt.replace(this->weaponTag, this->INTERNAL_WEAPON_TAG); fmt.replace(this->objectTag, this->INTERNAL_OBJECT_TAG); @@ -482,9 +554,9 @@ const Jupiter::ReadableString &RenX::getUniqueInternalTag() return _tags.getUniqueInternalTag(); } -void RenX::processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim) +void RenX::processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim, const RenX::BuildingInfo *building) { - _tags.processTags(msg, server, player, victim); + _tags.processTags(msg, server, player, victim, building); } void RenX::sanitizeTags(Jupiter::StringType &fmt) diff --git a/RenX.Core/RenX_Tags.h b/RenX.Core/RenX_Tags.h index c7f96c8..a19cbaf 100644 --- a/RenX.Core/RenX_Tags.h +++ b/RenX.Core/RenX_Tags.h @@ -39,7 +39,7 @@ namespace RenX struct PlayerInfo; class Server; - RENX_API void processTags(Jupiter::StringType &msg, const RenX::Server *server = nullptr, const RenX::PlayerInfo *player = nullptr, const RenX::PlayerInfo *victim = nullptr); + RENX_API void processTags(Jupiter::StringType &msg, const RenX::Server *server = nullptr, const RenX::PlayerInfo *player = nullptr, const RenX::PlayerInfo *victim = nullptr, const RenX::BuildingInfo *building = nullptr); RENX_API void sanitizeTags(Jupiter::StringType &fmt); RENX_API const Jupiter::ReadableString &getUniqueInternalTag(); @@ -136,6 +136,17 @@ namespace RenX Jupiter::StringS INTERNAL_VICTIM_STOLEN_TAG; Jupiter::StringS INTERNAL_VICTIM_ACCESS_TAG; + /** Building tags */ + Jupiter::StringS INTERNAL_BUILDING_NAME_TAG; + Jupiter::StringS INTERNAL_BUILDING_RAW_NAME_TAG; + Jupiter::StringS INTERNAL_BUILDING_HEALTH_TAG; + Jupiter::StringS INTERNAL_BUILDING_MAX_HEALTH_TAG; + Jupiter::StringS INTERNAL_BUILDING_HEALTH_PERCENTAGE_TAG; + Jupiter::StringS INTERNAL_BUILDING_HEALTH_BAR_TAG; + Jupiter::StringS INTERNAL_BUILDING_TEAM_COLOR_TAG; + Jupiter::StringS INTERNAL_BUILDING_TEAM_SHORT_TAG; + Jupiter::StringS INTERNAL_BUILDING_TEAM_LONG_TAG; + /** Other tags */ Jupiter::StringS INTERNAL_WEAPON_TAG; Jupiter::StringS INTERNAL_OBJECT_TAG; @@ -233,6 +244,17 @@ namespace RenX Jupiter::StringS victimStolenTag; Jupiter::StringS victimAccessTag; + /** Building tags */ + Jupiter::StringS buildingNameTag; + Jupiter::StringS buildingRawNameTag; + Jupiter::StringS buildingHealthTag; + Jupiter::StringS buildingMaxHealthTag; + Jupiter::StringS buildingHealthPercentageTag; + Jupiter::StringS buildingHealthBarTag; + Jupiter::StringS buildingTeamColorTag; + Jupiter::StringS buildingTeamShortTag; + Jupiter::StringS buildingTeamLongTag; + /** Other tags */ Jupiter::StringS weaponTag; Jupiter::StringS objectTag; diff --git a/RenX.Medals/RenX_Medals.cpp b/RenX.Medals/RenX_Medals.cpp index d584921..0a286f3 100644 --- a/RenX.Medals/RenX_Medals.cpp +++ b/RenX.Medals/RenX_Medals.cpp @@ -94,7 +94,7 @@ void RenX_MedalsPlugin::RenX_SanitizeTags(Jupiter::StringType &fmt) fmt.replace(RenX_MedalsPlugin::worthTag, this->INTERNAL_WORTH_TAG); } -void RenX_MedalsPlugin::RenX_ProcessTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim) +void RenX_MedalsPlugin::RenX_ProcessTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *, const RenX::BuildingInfo *) { if (player != nullptr) { diff --git a/RenX.Medals/RenX_Medals.h b/RenX.Medals/RenX_Medals.h index 1cb662c..3efbe50 100644 --- a/RenX.Medals/RenX_Medals.h +++ b/RenX.Medals/RenX_Medals.h @@ -43,7 +43,7 @@ class RenX_MedalsPlugin : public RenX::Plugin { public: // RenX::Plugin void RenX_SanitizeTags(Jupiter::StringType &fmt) override; - void RenX_ProcessTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim) override; + void RenX_ProcessTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim, const RenX::BuildingInfo *building) override; void RenX_OnPlayerCreate(RenX::Server *server, const RenX::PlayerInfo *player) override; void RenX_OnPlayerDelete(RenX::Server *server, const RenX::PlayerInfo *player) override; void RenX_OnJoin(RenX::Server *server, const RenX::PlayerInfo *player) override;