From c9858d76ccd477b72b9ce47d23f7872fc0258787 Mon Sep 17 00:00:00 2001 From: JAJames Date: Mon, 14 Mar 2016 15:34:10 -0400 Subject: [PATCH] RenX.Core: * Added more per-building data; added tags for new data RenX.Commands: * Added 'StaffTitle' config option to be able to configure the generic title for staff (default: "Moderator"). Reworded some strings. RenX.AlwaysRecord: * Added explicit 'override' keyword to 'RenX_OnMapStart' --- Release/Plugins/RenX.Core.lib | Bin 197340 -> 197340 bytes RenX.AlwaysRecord/RenX_AlwaysRecord.h | 4 +- RenX.Commands/RenX_Commands.cpp | 50 +++++++++++-------- RenX.Commands/RenX_Commands.h | 2 + RenX.Core/RenX_BuildingInfo.h | 10 ++-- RenX.Core/RenX_Server.cpp | 23 +++++++-- RenX.Core/RenX_Tags.cpp | 67 ++++++++++---------------- RenX.Core/RenX_Tags.h | 14 +++++- 8 files changed, 100 insertions(+), 70 deletions(-) diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index 6b9e742d2b603b4e418867bfaa5e5d1f0d42a713..7af566cf7dc4a97f3cb281fd00e452100fb56cf7 100644 GIT binary patch delta 12027 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 delta 12027 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::getName(), STRING_LITERAL_AS_REFERENCE("PlayerInfoFormat"), STRING_LITERAL_AS_REFERENCE(IRCCOLOR "03[Player Info]" IRCCOLOR "{TCOLOR} Name: " IRCBOLD "{RNAME}" IRCBOLD " - ID: {ID} - Team: " IRCBOLD "{TEAML}" IRCBOLD " - Vehicle Kills: {VEHICLEKILLS} - Building Kills {BUILDINGKILLS} - Kills {KILLS} - Deaths: {DEATHS} - KDR: {KDR} - Access: {ACCESS}")); RenX_CommandsPlugin::adminPlayerInfoFormat = Jupiter::IRC::Client::Config->get(RenX_CommandsPlugin::getName(), STRING_LITERAL_AS_REFERENCE("AdminPlayerInfoFormat"), Jupiter::StringS::Format("%.*s - IP: " IRCBOLD "{IP}" IRCBOLD " - RDNS: " IRCBOLD "{RDNS}" IRCBOLD " - Steam ID: " IRCBOLD "{STEAM}", RenX_CommandsPlugin::playerInfoFormat.size(), RenX_CommandsPlugin::playerInfoFormat.ptr())); RenX_CommandsPlugin::buildingInfoFormat = Jupiter::IRC::Client::Config->get(RenX_CommandsPlugin::getName(), STRING_LITERAL_AS_REFERENCE("BuildingInfoFormat"), STRING_LITERAL_AS_REFERENCE(IRCCOLOR) + RenX::tags->buildingTeamColorTag + RenX::tags->buildingNameTag + STRING_LITERAL_AS_REFERENCE(IRCCOLOR " - " IRCCOLOR "07") + RenX::tags->buildingHealthPercentageTag + STRING_LITERAL_AS_REFERENCE("%")); + RenX_CommandsPlugin::staffTitle = Jupiter::IRC::Client::Config->get(RenX_CommandsPlugin::getName(), STRING_LITERAL_AS_REFERENCE("StaffTitle"), STRING_LITERAL_AS_REFERENCE("Moderator")); RenX::sanitizeTags(RenX_CommandsPlugin::playerInfoFormat); RenX::sanitizeTags(RenX_CommandsPlugin::adminPlayerInfoFormat); @@ -97,6 +98,11 @@ const Jupiter::ReadableString &RenX_CommandsPlugin::getBuildingInfoFormat() cons return RenX_CommandsPlugin::buildingInfoFormat; } +const Jupiter::ReadableString &RenX_CommandsPlugin::getStaffTitle() const +{ + return RenX_CommandsPlugin::staffTitle; +} + RenX_CommandsPlugin::RenX_CommandsPlugin() { this->OnRehash(); @@ -1039,6 +1045,7 @@ IRC_COMMAND_INIT(KillDeathRatioIRCCommand) void ShowModsIRCCommand::create() { + this->addTrigger(STRING_LITERAL_AS_REFERENCE("showstaff")); this->addTrigger(STRING_LITERAL_AS_REFERENCE("showmods")); } @@ -1067,7 +1074,7 @@ void ShowModsIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString const Jupiter::ReadableString &ShowModsIRCCommand::getHelp(const Jupiter::ReadableString &) { - static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Sends a message, displaying the in-game moderators. Syntax: showmods"); + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Sends a message, displaying in-game staff. Syntax: showstaff"); return defaultHelp; } @@ -1077,6 +1084,7 @@ IRC_COMMAND_INIT(ShowModsIRCCommand) void ModsIRCCommand::create() { + this->addTrigger(STRING_LITERAL_AS_REFERENCE("staff")); this->addTrigger(STRING_LITERAL_AS_REFERENCE("mods")); } @@ -1091,6 +1099,7 @@ void ModsIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &cha int type = chan->getType(); RenX::PlayerInfo *player; Jupiter::StringL msg; + const Jupiter::ReadableString &staff_word = pluginInstance.getStaffTitle(); for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) { RenX::Server *server = RenX::getCore()->getServer(i); @@ -1106,14 +1115,14 @@ void ModsIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &cha { if (msg.isNotEmpty()) msg += ", "; - else msg += "Moderators in-game: "; + else msg += staff_word + "s in-game: "_jrs; msg += player->gamePrefix; msg += player->name; } } } if (msg.isEmpty()) - msg = "No moderators are in-game."; + msg = "No "_jrs + staff_word + "s are in-game."_jrs; source->sendMessage(channel, msg); } } @@ -1125,7 +1134,7 @@ void ModsIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &cha const Jupiter::ReadableString &ModsIRCCommand::getHelp(const Jupiter::ReadableString &) { - static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Sends a message, displaying the in-game moderators. Syntax: mods [show]"); + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Sends a message, displaying in-game staff. Syntax: staff [show]"); return defaultHelp; } @@ -3099,6 +3108,7 @@ GAME_COMMAND_INIT(HelpGameCommand) void ModsGameCommand::create() { + this->addTrigger(STRING_LITERAL_AS_REFERENCE("staff")); this->addTrigger(STRING_LITERAL_AS_REFERENCE("mods")); this->addTrigger(STRING_LITERAL_AS_REFERENCE("showmods")); } @@ -3107,13 +3117,14 @@ void ModsGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *, const Ju { RenX::PlayerInfo *player; Jupiter::StringL msg; + const Jupiter::ReadableString &staff_word = pluginInstance.getStaffTitle(); for (Jupiter::DLList::Node *node = source->players.getNode(0); node != nullptr; node = node->next) { player = node->data; if (player->isBot == false && (player->adminType.isNotEmpty() || (player->access != 0 && (player->gamePrefix.isNotEmpty() || player->formatNamePrefix.isNotEmpty())))) { if (msg.isEmpty()) - msg = "Moderators in-game: "; + msg = staff_word + "s in-game: "_jrs; else msg += ", "; msg += player->gamePrefix; @@ -3122,7 +3133,7 @@ void ModsGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *, const Ju } if (msg.isEmpty()) { - msg += "No moderators are in-game"; + msg += "No "_jrs + staff_word + "s are in-game"_jrs; RenX::GameCommand *cmd = source->getCommand(STRING_LITERAL_AS_REFERENCE("modrequest")); if (cmd != nullptr) msg.aformat("; please use \"%.*s%.*s\" if you require assistance.", source->getCommandPrefix().size(), source->getCommandPrefix().ptr(), cmd->getTrigger().size(), cmd->getTrigger().ptr()); @@ -3133,7 +3144,7 @@ void ModsGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *, const Ju const Jupiter::ReadableString &ModsGameCommand::getHelp(const Jupiter::ReadableString &) { - static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays the in-game moderators. Syntax: mods"); + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays in-game staff. Syntax: staff"); return defaultHelp; } @@ -3173,14 +3184,15 @@ void ModRequestGameCommand::create() void ModRequestGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, const Jupiter::ReadableString ¶meters) { + const Jupiter::ReadableString &staff_word = pluginInstance.getStaffTitle(); unsigned int serverCount = serverManager->size(); IRC_Bot *server; Jupiter::IRC::Client::Channel *channel; unsigned int channelCount; unsigned int messageCount = 0; Jupiter::String &fmtName = RenX::getFormattedPlayerName(player); - Jupiter::StringL msg = Jupiter::StringL::Format(IRCCOLOR "12[Moderator Request] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR "07 has requested assistance in-game; please look in ", fmtName.size(), fmtName.ptr()); - Jupiter::StringS msg2 = Jupiter::StringS::Format(IRCCOLOR "12[Moderator Request] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR "07 has requested assistance in-game!" IRCCOLOR, fmtName.size(), fmtName.ptr()); + Jupiter::StringL msg = Jupiter::StringL::Format(IRCCOLOR "12[%.*s Request] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR "07 has requested assistance in-game; please look in ", staff_word.size(), staff_word.ptr(), fmtName.size(), fmtName.ptr()); + Jupiter::StringS msg2 = Jupiter::StringS::Format(IRCCOLOR "12[%.*s Request] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR "07 has requested assistance in-game!" IRCCOLOR, staff_word.size(), staff_word.ptr(), fmtName.size(), fmtName.ptr()); for (unsigned int a = 0; a < serverCount; a++) { server = serverManager->getServer(a); @@ -3204,12 +3216,12 @@ void ModRequestGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *play } } } - source->sendMessage(player, Jupiter::StringS::Format("A total of %u moderators have been notified of your assistance request.", messageCount)); + source->sendMessage(player, Jupiter::StringS::Format("A total of %u %.*ss have been notified of your assistance request.", staff_word.size(), staff_word.ptr(), messageCount)); } const Jupiter::ReadableString &ModRequestGameCommand::getHelp(const Jupiter::ReadableString &) { - static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Notifies the moderators on IRC that assistance is required. Syntax: modRequest"); + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Notifies staff on IRC that assistance is required. Syntax: modRequest"); return defaultHelp; } @@ -3231,7 +3243,7 @@ void KillGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, co if (target == nullptr) source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); else if (target->access >= player->access) - source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not kill higher level moderators.")); + source->sendMessage(player, "Error: You can not kill higher level "_jrs + pluginInstance.getStaffTitle() + "s."_jrs); else { source->kill(target); @@ -3266,7 +3278,7 @@ void DisarmGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, if (target == nullptr) source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); else if (target->access >= player->access) - source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not disarm higher level moderators.")); + source->sendMessage(player, "Error: You can not disarm higher level "_jrs + pluginInstance.getStaffTitle() + "s."_jrs); else if (source->disarm(target) == false) source->sendMessage(player, "Error: Server does not support disarms."_jrs); else @@ -3300,7 +3312,7 @@ void DisarmC4GameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player if (target == nullptr) source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); else if (target->access >= player->access) - source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not disarm higher level moderators.")); + source->sendMessage(player, "Error: You can not disarm higher level "_jrs + pluginInstance.getStaffTitle() + "s."_jrs); else if (source->disarmC4(target) == false) source->sendMessage(player, "Error: Server does not support disarms."_jrs); else @@ -3336,7 +3348,7 @@ void DisarmBeaconGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *pl if (target == nullptr) source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); else if (target->access >= player->access) - source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not disarm higher level moderators.")); + source->sendMessage(player, "Error: You can not disarm higher level "_jrs + pluginInstance.getStaffTitle() + "s."_jrs); else if (source->disarmBeacon(target) == false) source->sendMessage(player, "Error: Server does not support disarms."_jrs); else @@ -3370,7 +3382,7 @@ void MineBanGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, if (target == nullptr) source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: Player not found.")); else if (target->access >= player->access) - source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not mine-ban higher level moderators.")); + source->sendMessage(player, "Error: You can not mine-ban higher level "_jrs + pluginInstance.getStaffTitle() + "s."_jrs); else { source->mineBan(target); @@ -3411,7 +3423,7 @@ void KickGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, co else if (player == target) source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not kick yourself.")); else if (target->access >= player->access) - source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not kick higher level moderators.")); + source->sendMessage(player, "Error: You can not kick higher level "_jrs + pluginInstance.getStaffTitle() + "s."_jrs); else { source->kickPlayer(target, reason); @@ -3452,7 +3464,7 @@ void TempBanGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, else if (player == target) source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not ban yourself.")); else if (target->access >= player->access) - source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not ban higher level moderators.")); + source->sendMessage(player, "Error: You can not ban higher level "_jrs + pluginInstance.getStaffTitle() + "s."_jrs); else { source->banPlayer(target, player->name, reason, pluginInstance.getTBanTime()); @@ -3494,7 +3506,7 @@ void KickBanGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, else if (player == target) source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not ban yourself.")); else if (target->access >= player->access) - source->sendMessage(player, STRING_LITERAL_AS_REFERENCE("Error: You can not ban higher level moderators.")); + source->sendMessage(player, "Error: You can not ban higher level "_jrs + pluginInstance.getStaffTitle() + "s."_jrs); else { source->banPlayer(target, player->name, reason); diff --git a/RenX.Commands/RenX_Commands.h b/RenX.Commands/RenX_Commands.h index b0fe62c..1201e06 100644 --- a/RenX.Commands/RenX_Commands.h +++ b/RenX.Commands/RenX_Commands.h @@ -41,6 +41,7 @@ public: const Jupiter::ReadableString &getPlayerInfoFormat() const; const Jupiter::ReadableString &getAdminPlayerInfoFormat() const; const Jupiter::ReadableString &getBuildingInfoFormat() const; + const Jupiter::ReadableString &getStaffTitle() const; RenX_CommandsPlugin(); private: @@ -49,6 +50,7 @@ private: Jupiter::StringS playerInfoFormat; Jupiter::StringS adminPlayerInfoFormat; Jupiter::StringS buildingInfoFormat; + Jupiter::StringS staffTitle; }; GENERIC_CONSOLE_COMMAND(RawRCONConsoleCommand) diff --git a/RenX.Core/RenX_BuildingInfo.h b/RenX.Core/RenX_BuildingInfo.h index a95f1ef..73b8343 100644 --- a/RenX.Core/RenX_BuildingInfo.h +++ b/RenX.Core/RenX_BuildingInfo.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2015 Jessica James. + * Copyright (C) 2015-2016 Jessica James. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -44,9 +44,13 @@ namespace RenX { Jupiter::StringS name; TeamType team = TeamType::Other; - double health = 0; - double max_health = 0; + int health = 0; + int max_health = 0; + int armor = 0; + int max_armor = 0; bool capturable = false; + bool destroyed = false; + std::chrono::steady_clock::time_point destruction_time; mutable Jupiter::INIFile varData; }; diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index 25a7cd9..a84213e 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -1690,8 +1690,8 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { /* lRCON Command; DevBot executed: binfo - rBuilding Health MaxHealth Team Capturable - rRx_Building_Refinery_GDI 4000 4000 GDI False + rBuilding Health MaxHealth Armor MaxArmor Team Capturable Destroyed + rRx_Building_Refinery_GDI 2000 2000 2000 2000 GDI False False */ Jupiter::INIFile::Section table; size_t i = tokens.token_count; @@ -1727,6 +1727,18 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) pair = table.getPair("Capturable"_jrs); if (pair != nullptr) building->capturable = pair->getValue().asBool(); + + pair = table.getPair("Destroyed"_jrs); + if (pair != nullptr) + building->destroyed = pair->getValue().asBool(); + + pair = table.getPair("Armor"_jrs); + if (pair != nullptr) + building->armor = pair->getValue().asInt(10); + + pair = table.getPair("MaxArmor"_jrs); + if (pair != nullptr) + building->max_armor = pair->getValue().asInt(10); } } } @@ -2264,7 +2276,12 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) objectName.truncate(internalsStr.size()); building = RenX::Server::getBuildingByName(objectName); if (building != nullptr) - building->health = 0.0; + { + building->health = 0; + building->armor = 0; + building->destroyed = true; + building->destruction_time = std::chrono::steady_clock::now(); + } } break; diff --git a/RenX.Core/RenX_Tags.cpp b/RenX.Core/RenX_Tags.cpp index 0669a29..af9f96d 100644 --- a/RenX.Core/RenX_Tags.cpp +++ b/RenX.Core/RenX_Tags.cpp @@ -36,7 +36,6 @@ struct TagsImp : RenX::Tags void processTags(Jupiter::StringType &msg, const RenX::LadderDatabase::Entry &entry); void sanitizeTags(Jupiter::StringType &fmt); const Jupiter::ReadableString &getUniqueInternalTag(); - Jupiter::StringS get_building_health_bar(const RenX::BuildingInfo *building); private: Jupiter::StringS uniqueTag; union @@ -196,7 +195,12 @@ TagsImp::TagsImp() 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_ARMOR_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_MAX_ARMOR_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_ARMOR_PERCENTAGE_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_DURABILITY_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_MAX_DURABILITY_TAG = this->getUniqueInternalTag(); + this->INTERNAL_BUILDING_DURABILITY_PERCENTAGE_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(); @@ -375,7 +379,12 @@ TagsImp::TagsImp() this->buildingHealthTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingHealthTag"_jrs, "{BHEALTH}"_jrs); this->buildingMaxHealthTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingMaxHealthTag"_jrs, "{BMHEALTH}"_jrs); this->buildingHealthPercentageTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingHealthPercentageTag"_jrs, "{BHP}"_jrs); - this->buildingHealthBarTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingHealthBarTag"_jrs, "{BHBAR}"_jrs); + this->buildingArmorTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingArmorTag"_jrs, "{BARMOR}"_jrs); + this->buildingMaxArmorTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingMaxArmorTag"_jrs, "{BMARMOR}"_jrs); + this->buildingArmorPercentageTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingArmorPercentageTag"_jrs, "{BAP}"_jrs); + this->buildingDurabilityTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingDurabilityTag"_jrs, "{BDURABILITY}"_jrs); + this->buildingMaxDurabilityTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingMaxDurabilityTag"_jrs, "{BMDURABILITY}"_jrs); + this->buildingDurabilityPercentageTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingDurabilityPercentageTag"_jrs, "{BDP}"_jrs); this->buildingTeamColorTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingTeamColorTag"_jrs, "{BCOLOR}"_jrs); this->buildingTeamShortTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingShortTeamTag"_jrs, "{BTEAMS}"_jrs); this->buildingTeamLongTag = Jupiter::IRC::Client::Config->get(configSection, "BuildingLongTeamTag"_jrs, "{BTEAML}"_jrs); @@ -425,40 +434,6 @@ TagsImp::TagsImp() this->loseScoreTag = Jupiter::IRC::Client::Config->get(configSection, "LoseScoreTag"_jrs, "{LOSESCORE}"_jrs); } -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 = static_cast((building->health / building->max_health) * TagsImp::bar_width); - Jupiter::String r(TagsImp::bar_width); - if (greenBars != 0) - { - r = IRCCOLOR "02,09"; - do - { - if (index % 2 == 0) - r += '/'; - else - r += ' '; - } - while (++index != greenBars); - if (index == TagsImp::bar_width) - return r += IRCNORMAL; - } - r += IRCCOLOR "02,04"; - do - { - if (index % 2 == 0) - r += '\\'; - else - r += ' '; - } - while (++index != TagsImp::bar_width); - return r += IRCNORMAL; -} - double get_ratio(double num, double denom) { if (denom == 0.0f) @@ -588,10 +563,15 @@ void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, { 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_TAG, Jupiter::StringS::Format("%d", building->health)); + PROCESS_TAG(this->INTERNAL_BUILDING_MAX_HEALTH_TAG, Jupiter::StringS::Format("%d", building->max_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_ARMOR_TAG, Jupiter::StringS::Format("%d", building->armor)); + PROCESS_TAG(this->INTERNAL_BUILDING_MAX_ARMOR_TAG, Jupiter::StringS::Format("%d", building->max_armor)); + PROCESS_TAG(this->INTERNAL_BUILDING_ARMOR_PERCENTAGE_TAG, Jupiter::StringS::Format("%.0f", (static_cast(building->armor) / static_cast(building->max_armor)) * 100.0)); + PROCESS_TAG(this->INTERNAL_BUILDING_DURABILITY_TAG, Jupiter::StringS::Format("%d", building->health + building->armor)); + PROCESS_TAG(this->INTERNAL_BUILDING_MAX_DURABILITY_TAG, Jupiter::StringS::Format("%d", building->max_health + building->max_armor)); + PROCESS_TAG(this->INTERNAL_BUILDING_DURABILITY_PERCENTAGE_TAG, Jupiter::StringS::Format("%.0f", (static_cast(building->health + building->armor) / static_cast(building->max_health + building->max_armor)) * 100.0)); 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)); @@ -827,7 +807,12 @@ void TagsImp::sanitizeTags(Jupiter::StringType &fmt) 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->buildingArmorTag, this->INTERNAL_BUILDING_ARMOR_TAG); + fmt.replace(this->buildingMaxArmorTag, this->INTERNAL_BUILDING_MAX_ARMOR_TAG); + fmt.replace(this->buildingArmorPercentageTag, this->INTERNAL_BUILDING_ARMOR_PERCENTAGE_TAG); + fmt.replace(this->buildingDurabilityTag, this->INTERNAL_BUILDING_DURABILITY_TAG); + fmt.replace(this->buildingMaxDurabilityTag, this->INTERNAL_BUILDING_MAX_DURABILITY_TAG); + fmt.replace(this->buildingDurabilityPercentageTag, this->INTERNAL_BUILDING_DURABILITY_PERCENTAGE_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); diff --git a/RenX.Core/RenX_Tags.h b/RenX.Core/RenX_Tags.h index 590c4cf..78432c5 100644 --- a/RenX.Core/RenX_Tags.h +++ b/RenX.Core/RenX_Tags.h @@ -181,7 +181,12 @@ namespace RenX 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_ARMOR_TAG; + Jupiter::StringS INTERNAL_BUILDING_MAX_ARMOR_TAG; + Jupiter::StringS INTERNAL_BUILDING_ARMOR_PERCENTAGE_TAG; + Jupiter::StringS INTERNAL_BUILDING_DURABILITY_TAG; + Jupiter::StringS INTERNAL_BUILDING_MAX_DURABILITY_TAG; + Jupiter::StringS INTERNAL_BUILDING_DURABILITY_PERCENTAGE_TAG; Jupiter::StringS INTERNAL_BUILDING_TEAM_COLOR_TAG; Jupiter::StringS INTERNAL_BUILDING_TEAM_SHORT_TAG; Jupiter::StringS INTERNAL_BUILDING_TEAM_LONG_TAG; @@ -360,7 +365,12 @@ namespace RenX Jupiter::StringS buildingHealthTag; Jupiter::StringS buildingMaxHealthTag; Jupiter::StringS buildingHealthPercentageTag; - Jupiter::StringS buildingHealthBarTag; + Jupiter::StringS buildingArmorTag; + Jupiter::StringS buildingMaxArmorTag; + Jupiter::StringS buildingArmorPercentageTag; + Jupiter::StringS buildingDurabilityTag; + Jupiter::StringS buildingMaxDurabilityTag; + Jupiter::StringS buildingDurabilityPercentageTag; Jupiter::StringS buildingTeamColorTag; Jupiter::StringS buildingTeamShortTag; Jupiter::StringS buildingTeamLongTag;