diff options
| author | Blipi <gpascualg93@gmail.com> | 2012-12-20 05:39:35 +0100 |
|---|---|---|
| committer | Rochet2 <tqbattlenet@gmail.com> | 2014-08-25 22:15:59 +0300 |
| commit | a7d1394c2e55ef99c9643338b073860a256c565f (patch) | |
| tree | be3432450f49d2003752a569fbddc0a7385853ac /src/server/game/AuctionHouseBot/AuctionHouseBot.cpp | |
| parent | 1c1f4fe33d75ca00fa6fd3370ff0f13731523f14 (diff) | |
Core/AHBot: Implemented AHBot based on MaNGOS code
Warning: CMake must be rerun
Apply if you have crashes
Rewrite Seller prices, add random properties and implement some suggestions on price calculations
Core/AHBot: Update to latest suggestions
Fix SQLs after merge, split the AH bot to spearate headers and cpps, fix the config default values
Remove case 8 from GetBuyModifier. It was not correct
Fix Gray Grey GRAY typos
Change message config name
Fix non pch build
Fix switch ident, also earlier removed whitespace. Add missing include for non pch build
Fix possible crash: if (forplayer || GetOwnerGUID()) changed to if (forplayer)
Apply Nayd.diff - Code style fixes
Fix leftovers from nayd
Correct SQL transaction and change one SQL query to C++ instead
Make loot items distinct
Diffstat (limited to 'src/server/game/AuctionHouseBot/AuctionHouseBot.cpp')
| -rw-r--r-- | src/server/game/AuctionHouseBot/AuctionHouseBot.cpp | 428 |
1 files changed, 428 insertions, 0 deletions
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp new file mode 100644 index 00000000000..707e143ac39 --- /dev/null +++ b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp @@ -0,0 +1,428 @@ +/* + * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> + * + * 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 "Log.h" +#include "Item.h" +#include "World.h" +#include "Config.h" +#include "AuctionHouseMgr.h" +#include "AuctionHouseBot.h" +#include "AuctionHouseBotBuyer.h" +#include "AuctionHouseBotSeller.h" + +bool AuctionBotConfig::Initialize() +{ + GetConfigFromFile(); + + if (!GetConfig(CONFIG_AHBOT_BUYER_ENABLED) && !GetConfig(CONFIG_AHBOT_SELLER_ENABLED)) + { + TC_LOG_INFO("ahbot", "AHBOT is Disabled."); + return false; + } + + if (GetConfig(CONFIG_AHBOT_ALLIANCE_ITEM_AMOUNT_RATIO) == 0 && GetConfig(CONFIG_AHBOT_HORDE_ITEM_AMOUNT_RATIO) == 0 && GetConfig(CONFIG_AHBOT_NEUTRAL_ITEM_AMOUNT_RATIO) == 0 && + !GetConfig(CONFIG_AHBOT_BUYER_ALLIANCE_ENABLED) && !GetConfig(CONFIG_AHBOT_BUYER_HORDE_ENABLED) && !GetConfig(CONFIG_AHBOT_BUYER_NEUTRAL_ENABLED)) + { + TC_LOG_INFO("ahbot", "All feature of AuctionHouseBot are disabled!"); + return false; + } + + if (GetConfig(CONFIG_AHBOT_ALLIANCE_ITEM_AMOUNT_RATIO) == 0 && GetConfig(CONFIG_AHBOT_HORDE_ITEM_AMOUNT_RATIO) == 0 && GetConfig(CONFIG_AHBOT_NEUTRAL_ITEM_AMOUNT_RATIO) == 0) + TC_LOG_INFO("ahbot", "AuctionHouseBot SELLER is disabled!"); + + if (!GetConfig(CONFIG_AHBOT_BUYER_ALLIANCE_ENABLED) && !GetConfig(CONFIG_AHBOT_BUYER_HORDE_ENABLED) && !GetConfig(CONFIG_AHBOT_BUYER_NEUTRAL_ENABLED)) + TC_LOG_INFO("ahbot", "AuctionHouseBot BUYER is disabled!"); + + _itemsPerCycleBoost = GetConfig(CONFIG_AHBOT_ITEMS_PER_CYCLE_BOOST); + _itemsPerCycleNormal = GetConfig(CONFIG_AHBOT_ITEMS_PER_CYCLE_NORMAL); + + return true; +} + +void AuctionBotConfig::SetConfig(AuctionBotConfigUInt32Values index, char const* fieldname, uint32 defvalue) +{ + SetConfig(index, sConfigMgr->GetIntDefault(fieldname, defvalue)); + + if (int32(GetConfig(index)) < 0) + { + TC_LOG_ERROR("ahbot", "AHBot: %s (%i) can't be negative. Using %u instead.", fieldname, int32(GetConfig(index)), defvalue); + SetConfig(index, defvalue); + } +} + +void AuctionBotConfig::SetConfigMax(AuctionBotConfigUInt32Values index, char const* fieldname, uint32 defvalue, uint32 maxvalue) +{ + SetConfig(index, sConfigMgr->GetIntDefault(fieldname, defvalue)); + + if (GetConfig(index) > maxvalue) + { + TC_LOG_ERROR("ahbot", "AHBot: %s (%u) must be in range 0...%u. Using %u instead.", fieldname, GetConfig(index), maxvalue, maxvalue); + SetConfig(index, maxvalue); + } +} + +void AuctionBotConfig::SetConfigMinMax(AuctionBotConfigUInt32Values index, char const* fieldname, uint32 defvalue, uint32 minvalue, uint32 maxvalue) +{ + SetConfig(index, sConfigMgr->GetIntDefault(fieldname, defvalue)); + + if (GetConfig(index) > maxvalue) + { + TC_LOG_ERROR("ahbot", "AHBot: %s (%u) must be in range %u...%u. Using %u instead.", fieldname, GetConfig(index), minvalue, maxvalue, maxvalue); + SetConfig(index, maxvalue); + } + + if (GetConfig(index) < minvalue) + { + TC_LOG_ERROR("ahbot", "AHBot: %s (%u) must be in range %u...%u. Using %u instead.", fieldname, GetConfig(index), minvalue, maxvalue, minvalue); + SetConfig(index, minvalue); + } +} + +void AuctionBotConfig::SetConfig(AuctionBotConfigBoolValues index, char const* fieldname, bool defvalue) +{ + SetConfig(index, sConfigMgr->GetBoolDefault(fieldname, defvalue)); +} + +//Get AuctionHousebot configuration file +void AuctionBotConfig::GetConfigFromFile() +{ + SetConfigMax(CONFIG_AHBOT_ALLIANCE_ITEM_AMOUNT_RATIO, "AuctionHouseBot.Alliance.Items.Amount.Ratio", 100, 10000); + SetConfigMax(CONFIG_AHBOT_HORDE_ITEM_AMOUNT_RATIO, "AuctionHouseBot.Horde.Items.Amount.Ratio", 100, 10000); + SetConfigMax(CONFIG_AHBOT_NEUTRAL_ITEM_AMOUNT_RATIO, "AuctionHouseBot.Neutral.Items.Amount.Ratio", 100, 10000); + + SetAHBotIncludes(sConfigMgr->GetStringDefault("AuctionHouseBot.forceIncludeItems", "")); + SetAHBotExcludes(sConfigMgr->GetStringDefault("AuctionHouseBot.forceExcludeItems", "")); + + SetConfig(CONFIG_AHBOT_BUYER_ALLIANCE_ENABLED, "AuctionHouseBot.Buyer.Alliance.Enabled", false); + SetConfig(CONFIG_AHBOT_BUYER_HORDE_ENABLED, "AuctionHouseBot.Buyer.Horde.Enabled", false); + SetConfig(CONFIG_AHBOT_BUYER_NEUTRAL_ENABLED, "AuctionHouseBot.Buyer.Neutral.Enabled", false); + + SetConfig(CONFIG_AHBOT_ITEMS_VENDOR, "AuctionHouseBot.Items.Vendor", false); + SetConfig(CONFIG_AHBOT_ITEMS_LOOT, "AuctionHouseBot.Items.Loot", true); + SetConfig(CONFIG_AHBOT_ITEMS_MISC, "AuctionHouseBot.Items.Misc", false); + + SetConfig(CONFIG_AHBOT_BIND_NO, "AuctionHouseBot.Bind.No", true); + SetConfig(CONFIG_AHBOT_BIND_PICKUP, "AuctionHouseBot.Bind.Pickup", false); + SetConfig(CONFIG_AHBOT_BIND_EQUIP, "AuctionHouseBot.Bind.Equip", true); + SetConfig(CONFIG_AHBOT_BIND_USE, "AuctionHouseBot.Bind.Use", true); + SetConfig(CONFIG_AHBOT_BIND_QUEST, "AuctionHouseBot.Bind.Quest", false); + SetConfig(CONFIG_AHBOT_LOCKBOX_ENABLED, "AuctionHouseBot.LockBox.Enabled", false); + + SetConfig(CONFIG_AHBOT_BUYPRICE_SELLER, "AuctionHouseBot.BuyPrice.Seller", true); + + SetConfig(CONFIG_AHBOT_ITEMS_PER_CYCLE_BOOST, "AuctionHouseBot.ItemsPerCycle.Boost", 1000); + SetConfig(CONFIG_AHBOT_ITEMS_PER_CYCLE_NORMAL, "AuctionHouseBot.ItemsPerCycle.Normal", 20); + + SetConfig(CONFIG_AHBOT_ITEM_MIN_ITEM_LEVEL, "AuctionHouseBot.Items.ItemLevel.Min", 0); + SetConfig(CONFIG_AHBOT_ITEM_MAX_ITEM_LEVEL, "AuctionHouseBot.Items.ItemLevel.Max", 0); + SetConfig(CONFIG_AHBOT_ITEM_MIN_REQ_LEVEL, "AuctionHouseBot.Items.ReqLevel.Min", 0); + SetConfig(CONFIG_AHBOT_ITEM_MAX_REQ_LEVEL, "AuctionHouseBot.Items.ReqLevel.Max", 0); + SetConfig(CONFIG_AHBOT_ITEM_MIN_SKILL_RANK, "AuctionHouseBot.Items.ReqSkill.Min", 0); + SetConfig(CONFIG_AHBOT_ITEM_MAX_SKILL_RANK, "AuctionHouseBot.Items.ReqSkill.Max", 0); + + SetConfig(CONFIG_AHBOT_ITEM_GRAY_AMOUNT, "AuctionHouseBot.Items.Amount.Gray", 0); + SetConfig(CONFIG_AHBOT_ITEM_WHITE_AMOUNT, "AuctionHouseBot.Items.Amount.White", 2000); + SetConfig(CONFIG_AHBOT_ITEM_GREEN_AMOUNT, "AuctionHouseBot.Items.Amount.Green", 2500); + SetConfig(CONFIG_AHBOT_ITEM_BLUE_AMOUNT, "AuctionHouseBot.Items.Amount.Blue", 1500); + SetConfig(CONFIG_AHBOT_ITEM_PURPLE_AMOUNT, "AuctionHouseBot.Items.Amount.Purple", 500); + SetConfig(CONFIG_AHBOT_ITEM_ORANGE_AMOUNT, "AuctionHouseBot.Items.Amount.Orange", 0); + SetConfig(CONFIG_AHBOT_ITEM_YELLOW_AMOUNT, "AuctionHouseBot.Items.Amount.Yellow", 0); + + SetConfigMax(CONFIG_AHBOT_CLASS_CONSUMABLE_AMOUNT, "AuctionHouseBot.Class.Consumable", 6, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_CONTAINER_AMOUNT, "AuctionHouseBot.Class.Container", 4, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_WEAPON_AMOUNT, "AuctionHouseBot.Class.Weapon", 8, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_GEM_AMOUNT, "AuctionHouseBot.Class.Gem", 3, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_ARMOR_AMOUNT, "AuctionHouseBot.Class.Armor", 8, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_REAGENT_AMOUNT, "AuctionHouseBot.Class.Reagent", 1, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT, "AuctionHouseBot.Class.Projectile", 2, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT, "AuctionHouseBot.Class.TradeGood", 10, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_GENERIC_AMOUNT, "AuctionHouseBot.Class.Generic", 1, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT, "AuctionHouseBot.Class.Recipe", 6, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_QUIVER_AMOUNT, "AuctionHouseBot.Class.Quiver", 1, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_QUEST_AMOUNT, "AuctionHouseBot.Class.Quest", 1, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_KEY_AMOUNT, "AuctionHouseBot.Class.Key", 1, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_MISC_AMOUNT, "AuctionHouseBot.Class.Misc", 5, 10); + SetConfigMax(CONFIG_AHBOT_CLASS_GLYPH_AMOUNT, "AuctionHouseBot.Class.Glyph", 3, 10); + + SetConfig(CONFIG_AHBOT_ALLIANCE_PRICE_RATIO, "AuctionHouseBot.Alliance.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_HORDE_PRICE_RATIO, "AuctionHouseBot.Horde.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_NEUTRAL_PRICE_RATIO, "AuctionHouseBot.Neutral.Price.Ratio", 100); + + SetConfig(CONFIG_AHBOT_ITEM_GRAY_PRICE_RATIO, "AuctionHouseBot.Items.Gray.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_ITEM_WHITE_PRICE_RATIO, "AuctionHouseBot.Items.White.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_ITEM_GREEN_PRICE_RATIO, "AuctionHouseBot.Items.Green.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_ITEM_BLUE_PRICE_RATIO, "AuctionHouseBot.Items.Blue.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_ITEM_PURPLE_PRICE_RATIO, "AuctionHouseBot.Items.Purple.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_ITEM_ORANGE_PRICE_RATIO, "AuctionHouseBot.Items.Orange.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_ITEM_YELLOW_PRICE_RATIO, "AuctionHouseBot.Items.Yellow.Price.Ratio", 100); + + SetConfig(CONFIG_AHBOT_CLASS_CONSUMABLE_PRICE_RATIO, "AuctionHouseBot.Class.Consumable.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_CONTAINER_PRICE_RATIO, "AuctionHouseBot.Class.Container.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_WEAPON_PRICE_RATIO, "AuctionHouseBot.Class.Weapon.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_GEM_PRICE_RATIO, "AuctionHouseBot.Class.Gem.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_ARMOR_PRICE_RATIO, "AuctionHouseBot.Class.Armor.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_REAGENT_PRICE_RATIO, "AuctionHouseBot.Class.Reagent.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_PRICE_RATIO, "AuctionHouseBot.Class.Projectile.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_PRICE_RATIO, "AuctionHouseBot.Class.TradeGood.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_GENERIC_PRICE_RATIO, "AuctionHouseBot.Class.Generic.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_RECIPE_PRICE_RATIO, "AuctionHouseBot.Class.Recipe.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_QUIVER_PRICE_RATIO, "AuctionHouseBot.Class.Quiver.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_QUEST_PRICE_RATIO, "AuctionHouseBot.Class.Quest.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_KEY_PRICE_RATIO, "AuctionHouseBot.Class.Key.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_MISC_PRICE_RATIO, "AuctionHouseBot.Class.Misc.Price.Ratio", 100); + SetConfig(CONFIG_AHBOT_CLASS_GLYPH_PRICE_RATIO, "AuctionHouseBot.Class.Glyph.Price.Ratio", 100); + + SetConfig(CONFIG_AHBOT_CLASS_CONSUMABLE_ALLOW_ZERO, "AuctionHouseBot.Class.Consumable.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_CONTAINER_ALLOW_ZERO, "AuctionHouseBot.Class.Container.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_WEAPON_ALLOW_ZERO, "AuctionHouseBot.Class.Weapon.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_GEM_ALLOW_ZERO, "AuctionHouseBot.Class.Gem.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_ARMOR_ALLOW_ZERO, "AuctionHouseBot.Class.Armor.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_REAGENT_ALLOW_ZERO, "AuctionHouseBot.Class.Reagent.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_ALLOW_ZERO, "AuctionHouseBot.Class.Projectile.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_ALLOW_ZERO, "AuctionHouseBot.Class.TradeGood.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_RECIPE_ALLOW_ZERO, "AuctionHouseBot.Class.Recipe.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_QUIVER_ALLOW_ZERO, "AuctionHouseBot.Class.Quiver.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_QUEST_ALLOW_ZERO, "AuctionHouseBot.Class.Quest.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_KEY_ALLOW_ZERO, "AuctionHouseBot.Class.Key.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_MISC_ALLOW_ZERO, "AuctionHouseBot.Class.Misc.Allow.Zero", false); + SetConfig(CONFIG_AHBOT_CLASS_GLYPH_ALLOW_ZERO, "AuctionHouseBot.Class.Glyph.Allow.Zero", false); + + SetConfig(CONFIG_AHBOT_MINTIME, "AuctionHouseBot.MinTime", 1); + SetConfig(CONFIG_AHBOT_MAXTIME, "AuctionHouseBot.MaxTime", 72); + + SetConfigMinMax(CONFIG_AHBOT_BUYER_CHANCE_RATIO_ALLIANCE, "AuctionHouseBot.Buyer.Alliance.Chance.Ratio", 3, 1, 100); + SetConfigMinMax(CONFIG_AHBOT_BUYER_CHANCE_RATIO_HORDE, "AuctionHouseBot.Buyer.Horde.Chance.Ratio", 3, 1, 100); + SetConfigMinMax(CONFIG_AHBOT_BUYER_CHANCE_RATIO_NEUTRAL, "AuctionHouseBot.Buyer.Neutral.Chance.Ratio", 3, 1, 100); + SetConfigMinMax(CONFIG_AHBOT_BUYER_RECHECK_INTERVAL, "AuctionHouseBot.Buyer.Recheck.Interval", 20, 1, DAY / MINUTE); + + SetConfig(CONFIG_AHBOT_SELLER_ENABLED, "AuctionHouseBot.Seller.Enabled", false); + SetConfig(CONFIG_AHBOT_BUYER_ENABLED, "AuctionHouseBot.Buyer.Enabled", false); + SetConfig(CONFIG_AHBOT_BUYPRICE_BUYER, "AuctionHouseBot.Buyer.Buyprice", true); + + SetConfig(CONFIG_AHBOT_CLASS_MISC_MOUNT_MIN_REQ_LEVEL, "AuctionHouseBot.Class.Misc.Mount.ReqLevel.Min", 0); + SetConfig(CONFIG_AHBOT_CLASS_MISC_MOUNT_MAX_REQ_LEVEL, "AuctionHouseBot.Class.Misc.Mount.ReqLevel.Max", 0); + SetConfig(CONFIG_AHBOT_CLASS_MISC_MOUNT_MIN_SKILL_RANK, "AuctionHouseBot.Class.Misc.Mount.ReqSkill.Min", 0); + SetConfig(CONFIG_AHBOT_CLASS_MISC_MOUNT_MAX_SKILL_RANK, "AuctionHouseBot.Class.Misc.Mount.ReqSkill.Max", 0); + SetConfig(CONFIG_AHBOT_CLASS_GLYPH_MIN_REQ_LEVEL, "AuctionHouseBot.Class.Glyph.ReqLevel.Min", 0); + SetConfig(CONFIG_AHBOT_CLASS_GLYPH_MAX_REQ_LEVEL, "AuctionHouseBot.Class.Glyph.ReqLevel.Max", 0); + SetConfig(CONFIG_AHBOT_CLASS_GLYPH_MIN_ITEM_LEVEL, "AuctionHouseBot.Class.Glyph.ItemLevel.Min", 0); + SetConfig(CONFIG_AHBOT_CLASS_GLYPH_MAX_ITEM_LEVEL, "AuctionHouseBot.Class.Glyph.ItemLevel.Max", 0); + SetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_MIN_ITEM_LEVEL, "AuctionHouseBot.Class.TradeGood.ItemLevel.Min", 0); + SetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_MAX_ITEM_LEVEL, "AuctionHouseBot.Class.TradeGood.ItemLevel.Max", 0); + SetConfig(CONFIG_AHBOT_CLASS_CONTAINER_MIN_ITEM_LEVEL, "AuctionHouseBot.Class.Container.ItemLevel.Min", 0); + SetConfig(CONFIG_AHBOT_CLASS_CONTAINER_MAX_ITEM_LEVEL, "AuctionHouseBot.Class.Container.ItemLevel.Max", 0); +} + +char const* AuctionBotConfig::GetHouseTypeName(AuctionHouseType houseType) +{ + static char const* names[MAX_AUCTION_HOUSE_TYPE] = { "Alliance", "Horde", "Neutral" }; + return names[houseType]; +} + +uint32 AuctionBotConfig::GetConfigItemAmountRatio(AuctionHouseType houseType) const +{ + switch (houseType) + { + case AUCTION_HOUSE_ALLIANCE: + return GetConfig(CONFIG_AHBOT_ALLIANCE_ITEM_AMOUNT_RATIO); + case AUCTION_HOUSE_HORDE: + return GetConfig(CONFIG_AHBOT_HORDE_ITEM_AMOUNT_RATIO); + default: + return GetConfig(CONFIG_AHBOT_NEUTRAL_ITEM_AMOUNT_RATIO); + } +} + +bool AuctionBotConfig::GetConfigBuyerEnabled(AuctionHouseType houseType) const +{ + switch (houseType) + { + case AUCTION_HOUSE_ALLIANCE: + return GetConfig(CONFIG_AHBOT_BUYER_ALLIANCE_ENABLED); + case AUCTION_HOUSE_HORDE: + return GetConfig(CONFIG_AHBOT_BUYER_HORDE_ENABLED); + default: + return GetConfig(CONFIG_AHBOT_BUYER_NEUTRAL_ENABLED); + } +} + +uint32 AuctionBotConfig::GetConfigItemQualityAmount(AuctionQuality quality) const +{ + switch (quality) + { + case AUCTION_QUALITY_GRAY: + return GetConfig(CONFIG_AHBOT_ITEM_GRAY_AMOUNT); + case AUCTION_QUALITY_WHITE: + return GetConfig(CONFIG_AHBOT_ITEM_WHITE_AMOUNT); + case AUCTION_QUALITY_GREEN: + return GetConfig(CONFIG_AHBOT_ITEM_GREEN_AMOUNT); + case AUCTION_QUALITY_BLUE: + return GetConfig(CONFIG_AHBOT_ITEM_BLUE_AMOUNT); + case AUCTION_QUALITY_PURPLE: + return GetConfig(CONFIG_AHBOT_ITEM_PURPLE_AMOUNT); + case AUCTION_QUALITY_ORANGE: + return GetConfig(CONFIG_AHBOT_ITEM_ORANGE_AMOUNT); + default: + return GetConfig(CONFIG_AHBOT_ITEM_YELLOW_AMOUNT); + } +} + +AuctionHouseBot::AuctionHouseBot(): _buyer(nullptr), _seller(nullptr), _operationSelector(0) +{ +} + +AuctionHouseBot::~AuctionHouseBot() +{ + delete _buyer; + delete _seller; +} + +void AuctionHouseBot::InitializeAgents() +{ + if (sAuctionBotConfig->GetConfig(CONFIG_AHBOT_SELLER_ENABLED)) + { + if (_seller) + delete _seller; + + _seller = new AuctionBotSeller(); + if (!_seller->Initialize()) + { + delete _seller; + _seller = nullptr; + } + } + + if (sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_ENABLED)) + { + if (_buyer) + delete _buyer; + + _buyer = new AuctionBotBuyer(); + if (!_buyer->Initialize()) + { + delete _buyer; + _buyer = nullptr; + } + } +} + +void AuctionHouseBot::Initialize() +{ + if (sAuctionBotConfig->Initialize()) + InitializeAgents(); +} + +void AuctionHouseBot::SetItemsRatio(uint32 al, uint32 ho, uint32 ne) +{ + if (_seller) + _seller->SetItemsRatio(al, ho, ne); +} + +void AuctionHouseBot::SetItemsRatioForHouse(AuctionHouseType house, uint32 val) +{ + if (_seller) + _seller->SetItemsRatioForHouse(house, val); +} + +void AuctionHouseBot::SetItemsAmount(uint32(&vals)[MAX_AUCTION_QUALITY]) +{ + if (_seller) + _seller->SetItemsAmount(vals); +} + +void AuctionHouseBot::SetItemsAmountForQuality(AuctionQuality quality, uint32 val) +{ + if (_seller) + _seller->SetItemsAmountForQuality(quality, val); +} + +void AuctionHouseBot::ReloadAllConfig() +{ + sAuctionBotConfig->Reload(); + InitializeAgents(); +} + +void AuctionHouseBot::PrepareStatusInfos(AuctionHouseBotStatusInfo& statusInfo) +{ + for (uint32 i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i) + { + statusInfo[i].ItemsCount = 0; + + for (int j = 0; j < MAX_AUCTION_QUALITY; ++j) + statusInfo[i].QualityInfo[j] = 0; + + AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(AuctionHouseType(i)); + for (AuctionHouseObject::AuctionEntryMap::const_iterator itr = auctionHouse->GetAuctionsBegin(); itr != auctionHouse->GetAuctionsEnd(); ++itr) + { + AuctionEntry* auctionEntry = itr->second; + if (Item* item = sAuctionMgr->GetAItem(auctionEntry->itemGUIDLow)) + { + ItemTemplate const* prototype = item->GetTemplate(); + if (!auctionEntry->owner) // Add only ahbot items + { + if (prototype->Quality < MAX_AUCTION_QUALITY) + ++statusInfo[i].QualityInfo[prototype->Quality]; + + ++statusInfo[i].ItemsCount; + } + } + } + } +} + +void AuctionHouseBot::Rebuild(bool all) +{ + for (uint32 i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i) + { + AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(AuctionHouseType(i)); + for (AuctionHouseObject::AuctionEntryMap::const_iterator itr = auctionHouse->GetAuctionsBegin(); itr != auctionHouse->GetAuctionsEnd(); ++itr) + if (!itr->second->owner) // ahbot auction + if (all || itr->second->bid == 0) // expire now auction if no bid or forced + itr->second->expire_time = sWorld->GetGameTime(); + } +} + +void AuctionHouseBot::Update() +{ + // nothing do... + if (!_buyer && !_seller) + return; + + // scan all possible update cases until first success + for (uint32 count = 0; count < 2 * MAX_AUCTION_HOUSE_TYPE; ++count) + { + bool successStep = false; + + if (_operationSelector < MAX_AUCTION_HOUSE_TYPE) + { + if (_seller) + successStep = _seller->Update(AuctionHouseType(_operationSelector)); + } + else + { + if (_buyer) + successStep = _buyer->Update(AuctionHouseType(_operationSelector - MAX_AUCTION_HOUSE_TYPE)); + } + + ++_operationSelector; + if (_operationSelector >= 2 * MAX_AUCTION_HOUSE_TYPE) + _operationSelector = 0; + + // one success update per call + if (successStep) + break; + } +} |
