diff options
| author | Peter Keresztes Schmidt <carbenium@outlook.com> | 2020-08-17 22:04:44 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-17 22:04:44 +0200 |
| commit | 426513ec8e154df7c13ba98371513dd9f6d2cb9d (patch) | |
| tree | 31e1b9057313d30609c075898b285d6a7fb67ebe /src/server/game | |
| parent | a9a4f05a282fd85e4f22923ec251c92e79581a47 (diff) | |
Scripts/Commands: Convert argument parsing of ahbot commands (PR #25264)
Diffstat (limited to 'src/server/game')
5 files changed, 121 insertions, 24 deletions
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp index 96fd4fc5b7c..52d17473146 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp @@ -455,10 +455,10 @@ void AuctionHouseBot::SetItemsRatioForHouse(AuctionHouseType house, uint32 val) _seller->SetItemsRatioForHouse(house, val); } -void AuctionHouseBot::SetItemsAmount(uint32(&vals)[MAX_AUCTION_QUALITY]) +void AuctionHouseBot::SetItemsAmount(std::array<uint32, MAX_AUCTION_QUALITY> const& amounts) { if (_seller) - _seller->SetItemsAmount(vals); + _seller->SetItemsAmount(amounts); } void AuctionHouseBot::SetItemsAmountForQuality(AuctionQuality quality, uint32 val) @@ -473,16 +473,16 @@ void AuctionHouseBot::ReloadAllConfig() InitializeAgents(); } -void AuctionHouseBot::PrepareStatusInfos(AuctionHouseBotStatusInfo& statusInfo) +void AuctionHouseBot::PrepareStatusInfos(std::unordered_map<AuctionHouseType, AuctionHouseBotStatusInfoPerType>& statusInfo) { - for (uint32 i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i) + for (AuctionHouseType ahType : EnumUtils::Iterate<AuctionHouseType>()) { - statusInfo[i].ItemsCount = 0; + statusInfo[ahType].ItemsCount = 0; - for (int j = 0; j < MAX_AUCTION_QUALITY; ++j) - statusInfo[i].QualityInfo[j] = 0; + for (AuctionQuality quality : EnumUtils::Iterate<AuctionQuality>()) + statusInfo[ahType].QualityInfo[quality] = 0; - AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(AuctionHouseType(i)); + AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(ahType); for (AuctionHouseObject::AuctionEntryMap::const_iterator itr = auctionHouse->GetAuctionsBegin(); itr != auctionHouse->GetAuctionsEnd(); ++itr) { AuctionEntry* auctionEntry = itr->second; @@ -492,9 +492,9 @@ void AuctionHouseBot::PrepareStatusInfos(AuctionHouseBotStatusInfo& statusInfo) if (!auctionEntry->owner || sAuctionBotConfig->IsBotChar(auctionEntry->owner)) // Add only ahbot items { if (prototype->Quality < MAX_AUCTION_QUALITY) - ++statusInfo[i].QualityInfo[prototype->Quality]; + ++statusInfo[ahType].QualityInfo[AuctionQuality(prototype->Quality)]; - ++statusInfo[i].ItemsCount; + ++statusInfo[ahType].ItemsCount; } } } diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBot.h b/src/server/game/AuctionHouseBot/AuctionHouseBot.h index 27011088a22..00ec6e3c8a4 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBot.h +++ b/src/server/game/AuctionHouseBot/AuctionHouseBot.h @@ -21,12 +21,14 @@ #include "Define.h" #include "SharedDefines.h" #include <string> +#include <unordered_map> #include <vector> class AuctionBotSeller; class AuctionBotBuyer; // shadow of ItemQualities with skipped ITEM_QUALITY_HEIRLOOM, anything after ITEM_QUALITY_ARTIFACT(6) in fact +// EnumUtils: DESCRIBE THIS enum AuctionQuality { AUCTION_QUALITY_GRAY = ITEM_QUALITY_POOR, @@ -40,6 +42,7 @@ enum AuctionQuality #define MAX_AUCTION_QUALITY 7 +// EnumUtils: DESCRIBE THIS enum AuctionHouseType { AUCTION_HOUSE_NEUTRAL = 0, @@ -274,11 +277,9 @@ public: struct AuctionHouseBotStatusInfoPerType { uint32 ItemsCount; - uint32 QualityInfo[MAX_AUCTION_QUALITY]; + std::unordered_map<AuctionQuality, uint32> QualityInfo; }; -typedef AuctionHouseBotStatusInfoPerType AuctionHouseBotStatusInfo[MAX_AUCTION_HOUSE_TYPE]; - // This class handle both Selling and Buying method // (holder of AuctionBotBuyer and AuctionBotSeller objects) class TC_GAME_API AuctionHouseBot @@ -298,12 +299,12 @@ public: // Followed method is mainly used by cs_ahbot.cpp for in-game/console command void SetItemsRatio(uint32 al, uint32 ho, uint32 ne); void SetItemsRatioForHouse(AuctionHouseType house, uint32 val); - void SetItemsAmount(uint32(&vals)[MAX_AUCTION_QUALITY]); + void SetItemsAmount(std::array<uint32, MAX_AUCTION_QUALITY> const& amounts); void SetItemsAmountForQuality(AuctionQuality quality, uint32 val); void ReloadAllConfig(); void Rebuild(bool all); - void PrepareStatusInfos(AuctionHouseBotStatusInfo& statusInfo); + void PrepareStatusInfos(std::unordered_map<AuctionHouseType, AuctionHouseBotStatusInfoPerType>& statusInfo); private: void InitializeAgents(); diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index dfbe396e660..e9fc8fc98c4 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -778,15 +778,15 @@ void AuctionBotSeller::SetItemsRatioForHouse(AuctionHouseType house, uint32 val) LoadItemsQuantity(_houseConfig[house]); } -void AuctionBotSeller::SetItemsAmount(uint32(&vals)[MAX_AUCTION_QUALITY]) +void AuctionBotSeller::SetItemsAmount(std::array<uint32, MAX_AUCTION_QUALITY> const& amounts) { - sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_GRAY_AMOUNT, vals[AUCTION_QUALITY_GRAY]); - sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_WHITE_AMOUNT, vals[AUCTION_QUALITY_WHITE]); - sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_GREEN_AMOUNT, vals[AUCTION_QUALITY_GREEN]); - sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_BLUE_AMOUNT, vals[AUCTION_QUALITY_BLUE]); - sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_PURPLE_AMOUNT, vals[AUCTION_QUALITY_PURPLE]); - sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_ORANGE_AMOUNT, vals[AUCTION_QUALITY_ORANGE]); - sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_YELLOW_AMOUNT, vals[AUCTION_QUALITY_YELLOW]); + sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_GRAY_AMOUNT, amounts[AUCTION_QUALITY_GRAY]); + sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_WHITE_AMOUNT, amounts[AUCTION_QUALITY_WHITE]); + sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_GREEN_AMOUNT, amounts[AUCTION_QUALITY_GREEN]); + sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_BLUE_AMOUNT, amounts[AUCTION_QUALITY_BLUE]); + sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_PURPLE_AMOUNT, amounts[AUCTION_QUALITY_PURPLE]); + sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_ORANGE_AMOUNT, amounts[AUCTION_QUALITY_ORANGE]); + sAuctionBotConfig->SetConfig(CONFIG_AHBOT_ITEM_YELLOW_AMOUNT, amounts[AUCTION_QUALITY_YELLOW]); for (int i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i) LoadItemsQuantity(_houseConfig[i]); diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h index a479faa7edd..f89fa180b60 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h @@ -129,7 +129,7 @@ public: void AddNewAuctions(SellerConfiguration& config); void SetItemsRatio(uint32 al, uint32 ho, uint32 ne); void SetItemsRatioForHouse(AuctionHouseType house, uint32 val); - void SetItemsAmount(uint32(&vals)[MAX_AUCTION_QUALITY]); + void SetItemsAmount(std::array<uint32, MAX_AUCTION_QUALITY> const& amounts); void SetItemsAmountForQuality(AuctionQuality quality, uint32 val); void LoadConfig(); diff --git a/src/server/game/AuctionHouseBot/enuminfo_AuctionHouseBot.cpp b/src/server/game/AuctionHouseBot/enuminfo_AuctionHouseBot.cpp new file mode 100644 index 00000000000..bdec8875922 --- /dev/null +++ b/src/server/game/AuctionHouseBot/enuminfo_AuctionHouseBot.cpp @@ -0,0 +1,96 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "AuctionHouseBot.h" +#include "Define.h" +#include "SmartEnum.h" +#include <stdexcept> + +namespace Trinity +{ +namespace Impl +{ + +/************************************************************************\ +|* data for enum 'AuctionQuality' in 'AuctionHouseBot.h' auto-generated *| +\************************************************************************/ +template <> +TC_API_EXPORT EnumText EnumUtils<AuctionQuality>::ToString(AuctionQuality value) +{ + switch (value) + { + case AUCTION_QUALITY_GRAY: return { "AUCTION_QUALITY_GRAY", "AUCTION_QUALITY_GRAY", "" }; + case AUCTION_QUALITY_WHITE: return { "AUCTION_QUALITY_WHITE", "AUCTION_QUALITY_WHITE", "" }; + case AUCTION_QUALITY_GREEN: return { "AUCTION_QUALITY_GREEN", "AUCTION_QUALITY_GREEN", "" }; + case AUCTION_QUALITY_BLUE: return { "AUCTION_QUALITY_BLUE", "AUCTION_QUALITY_BLUE", "" }; + case AUCTION_QUALITY_PURPLE: return { "AUCTION_QUALITY_PURPLE", "AUCTION_QUALITY_PURPLE", "" }; + case AUCTION_QUALITY_ORANGE: return { "AUCTION_QUALITY_ORANGE", "AUCTION_QUALITY_ORANGE", "" }; + case AUCTION_QUALITY_YELLOW: return { "AUCTION_QUALITY_YELLOW", "AUCTION_QUALITY_YELLOW", "" }; + default: throw std::out_of_range("value"); + } +} + +template <> +TC_API_EXPORT size_t EnumUtils<AuctionQuality>::Count() { return 7; } + +template <> +TC_API_EXPORT AuctionQuality EnumUtils<AuctionQuality>::FromIndex(size_t index) +{ + switch (index) + { + case 0: return AUCTION_QUALITY_GRAY; + case 1: return AUCTION_QUALITY_WHITE; + case 2: return AUCTION_QUALITY_GREEN; + case 3: return AUCTION_QUALITY_BLUE; + case 4: return AUCTION_QUALITY_PURPLE; + case 5: return AUCTION_QUALITY_ORANGE; + case 6: return AUCTION_QUALITY_YELLOW; + default: throw std::out_of_range("index"); + } +} + +/**************************************************************************\ +|* data for enum 'AuctionHouseType' in 'AuctionHouseBot.h' auto-generated *| +\**************************************************************************/ +template <> +TC_API_EXPORT EnumText EnumUtils<AuctionHouseType>::ToString(AuctionHouseType value) +{ + switch (value) + { + case AUCTION_HOUSE_NEUTRAL: return { "AUCTION_HOUSE_NEUTRAL", "AUCTION_HOUSE_NEUTRAL", "" }; + case AUCTION_HOUSE_ALLIANCE: return { "AUCTION_HOUSE_ALLIANCE", "AUCTION_HOUSE_ALLIANCE", "" }; + case AUCTION_HOUSE_HORDE: return { "AUCTION_HOUSE_HORDE", "AUCTION_HOUSE_HORDE", "" }; + default: throw std::out_of_range("value"); + } +} + +template <> +TC_API_EXPORT size_t EnumUtils<AuctionHouseType>::Count() { return 3; } + +template <> +TC_API_EXPORT AuctionHouseType EnumUtils<AuctionHouseType>::FromIndex(size_t index) +{ + switch (index) + { + case 0: return AUCTION_HOUSE_NEUTRAL; + case 1: return AUCTION_HOUSE_ALLIANCE; + case 2: return AUCTION_HOUSE_HORDE; + default: throw std::out_of_range("index"); + } +} +} +} |
