/* * Copyright (C) 2016+ AzerothCore , released under GNU AGPL v3 license, you may redistribute it * and/or modify it under version 3 of the License, or (at your option), any later version. */ #ifndef _PLAYERBOT_PLAYERbotAICONFIG_H #define _PLAYERBOT_PLAYERbotAICONFIG_H #include #include #include "Common.h" #include "DBCEnums.h" #include "SharedDefines.h" #include "Talentspec.h" enum class BotCheatMask : uint32 { none = 0, taxi = 1, gold = 2, health = 4, mana = 8, power = 16, raid = 32, food = 64, maxMask = 128 }; enum class HealingManaEfficiency : uint8 { VERY_LOW = 1, LOW = 2, MEDIUM = 4, HIGH = 8, VERY_HIGH = 16, SUPERIOR = 32 }; enum NewRpgStatus : int { RPG_STATUS_START = 0, // Going to far away place RPG_GO_GRIND = 0, RPG_GO_CAMP = 1, // Exploring nearby RPG_WANDER_RANDOM = 2, RPG_WANDER_NPC = 3, // Do Quest (based on quest status) RPG_DO_QUEST = 4, // Travel RPG_TRAVEL_FLIGHT = 5, // Taking a break RPG_REST = 6, // Initial status RPG_IDLE = 7, RPG_STATUS_END = 8 }; #define MAX_SPECNO 20 class PlayerbotAIConfig { public: PlayerbotAIConfig(){}; static PlayerbotAIConfig* instance() { static PlayerbotAIConfig instance; return &instance; } bool Initialize(); bool IsInRandomAccountList(uint32 id); bool IsInRandomQuestItemList(uint32 id); bool IsPvpProhibited(uint32 zoneId, uint32 areaId); bool IsInPvpProhibitedZone(uint32 id); bool IsInPvpProhibitedArea(uint32 id); bool enabled; bool disabledWithoutRealPlayer; bool EnableICCBuffs; bool allowAccountBots, allowGuildBots, allowTrustedAccountBots; bool randomBotGuildNearby, randomBotInvitePlayer, inviteChat; uint32 globalCoolDown, reactDelay, maxWaitForMove, disableMoveSplinePath, maxMovementSearchTime, expireActionTime, dispelAuraDuration, passiveDelay, repeatDelay, errorDelay, rpgDelay, sitDelay, returnDelay, lootDelay; bool dynamicReactDelay; float sightDistance, spellDistance, reactDistance, grindDistance, lootDistance, shootDistance, fleeDistance, tooCloseDistance, meleeDistance, followDistance, whisperDistance, contactDistance, aoeRadius, rpgDistance, targetPosRecalcDistance, farDistance, healDistance, aggroDistance; uint32 criticalHealth, lowHealth, mediumHealth, almostFullHealth; uint32 lowMana, mediumMana, highMana; bool autoSaveMana; uint32 saveManaThreshold; bool autoAvoidAoe; float maxAoeAvoidRadius; std::set aoeAvoidSpellWhitelist; bool tellWhenAvoidAoe; std::set disallowedGameObjects; uint32 openGoSpell; bool randomBotAutologin; bool botAutologin; std::string randomBotMapsAsString; float probTeleToBankers; bool enableWeightTeleToCityBankers; int weightTeleToStormwind; int weightTeleToIronforge; int weightTeleToDarnassus; int weightTeleToExodar; int weightTeleToOrgrimmar; int weightTeleToUndercity; int weightTeleToThunderBluff; int weightTeleToSilvermoonCity; int weightTeleToShattrathCity; int weightTeleToDalaran; std::vector randomBotMaps; std::vector randomBotQuestItems; std::vector randomBotAccounts; std::vector randomBotSpellIds; std::vector randomBotQuestIds; uint32 randomBotTeleportDistance; float randomGearLoweringChance; bool incrementalGearInit; int32 randomGearQualityLimit; int32 randomGearScoreLimit; float randomBotMinLevelChance, randomBotMaxLevelChance; float randomBotRpgChance; uint32 minRandomBots, maxRandomBots; uint32 randomBotUpdateInterval, randomBotCountChangeMinInterval, randomBotCountChangeMaxInterval; uint32 minRandomBotInWorldTime, maxRandomBotInWorldTime; uint32 minRandomBotRandomizeTime, maxRandomBotRandomizeTime; uint32 minRandomBotChangeStrategyTime, maxRandomBotChangeStrategyTime; uint32 minRandomBotReviveTime, maxRandomBotReviveTime; uint32 minRandomBotTeleportInterval, maxRandomBotTeleportInterval; uint32 permanentlyInWorldTime; uint32 minRandomBotPvpTime, maxRandomBotPvpTime; uint32 randomBotsPerInterval; uint32 minRandomBotsPriceChangeInterval, maxRandomBotsPriceChangeInterval; uint32 disabledWithoutRealPlayerLoginDelay, disabledWithoutRealPlayerLogoutDelay; bool randomBotJoinLfg; // Buff system // Min group size to use Greater buffs (Paladin, Mage, Druid). Default: 3 int32 minBotsForGreaterBuff; // Cooldown (seconds) between reagent-missing RP warnings, per bot & per buff. Default: 30 int32 rpWarningCooldown; // chat bool randomBotTalk; bool randomBotEmote; bool randomBotSuggestDungeons; bool enableBroadcasts; bool enableGreet; bool randomBotSayWithoutMaster; uint32 broadcastChanceMaxValue; uint32 broadcastToGuildGlobalChance; uint32 broadcastToWorldGlobalChance; uint32 broadcastToGeneralGlobalChance; uint32 broadcastToTradeGlobalChance; uint32 broadcastToLFGGlobalChance; uint32 broadcastToLocalDefenseGlobalChance; uint32 broadcastToWorldDefenseGlobalChance; uint32 broadcastToGuildRecruitmentGlobalChance; uint32 broadcastChanceLootingItemPoor; uint32 broadcastChanceLootingItemNormal; uint32 broadcastChanceLootingItemUncommon; uint32 broadcastChanceLootingItemRare; uint32 broadcastChanceLootingItemEpic; uint32 broadcastChanceLootingItemLegendary; uint32 broadcastChanceLootingItemArtifact; uint32 broadcastChanceQuestAccepted; uint32 broadcastChanceQuestUpdateObjectiveCompleted; uint32 broadcastChanceQuestUpdateObjectiveProgress; uint32 broadcastChanceQuestUpdateFailedTimer; uint32 broadcastChanceQuestUpdateComplete; uint32 broadcastChanceQuestTurnedIn; uint32 broadcastChanceKillNormal; uint32 broadcastChanceKillElite; uint32 broadcastChanceKillRareelite; uint32 broadcastChanceKillWorldboss; uint32 broadcastChanceKillRare; uint32 broadcastChanceKillUnknown; uint32 broadcastChanceKillPet; uint32 broadcastChanceKillPlayer; uint32 broadcastChanceLevelupGeneric; uint32 broadcastChanceLevelupTenX; uint32 broadcastChanceLevelupMaxLevel; uint32 broadcastChanceSuggestInstance; uint32 broadcastChanceSuggestQuest; uint32 broadcastChanceSuggestGrindMaterials; uint32 broadcastChanceSuggestGrindReputation; uint32 broadcastChanceSuggestSell; uint32 broadcastChanceSuggestSomething; uint32 broadcastChanceSuggestSomethingToxic; uint32 broadcastChanceSuggestToxicLinks; std::string toxicLinksPrefix; uint32 toxicLinksRepliesChance; uint32 broadcastChanceSuggestThunderfury; uint32 thunderfuryRepliesChance; uint32 broadcastChanceGuildManagement; uint32 guildRepliesRate; bool suggestDungeonsInLowerCaseRandomly; // -- bool randomBotJoinBG; bool randomBotAutoJoinBG; std::string randomBotAutoJoinICBrackets; std::string randomBotAutoJoinEYBrackets; std::string randomBotAutoJoinAVBrackets; std::string randomBotAutoJoinABBrackets; std::string randomBotAutoJoinWSBrackets; uint32 randomBotAutoJoinBGICCount; uint32 randomBotAutoJoinBGEYCount; uint32 randomBotAutoJoinBGAVCount; uint32 randomBotAutoJoinBGABCount; uint32 randomBotAutoJoinBGWSCount; uint32 randomBotAutoJoinArenaBracket; uint32 randomBotAutoJoinBGRatedArena2v2Count; uint32 randomBotAutoJoinBGRatedArena3v3Count; uint32 randomBotAutoJoinBGRatedArena5v5Count; bool randomBotLoginAtStartup; uint32 randomBotTeleLowerLevel, randomBotTeleHigherLevel; std::map> zoneBrackets; bool logInGroupOnly, logValuesPerTick; bool fleeingEnabled; bool summonAtInnkeepersEnabled; std::string combatStrategies, nonCombatStrategies; std::string randomBotCombatStrategies, randomBotNonCombatStrategies; bool applyInstanceStrategies; uint32 randomBotMinLevel, randomBotMaxLevel; float randomChangeMultiplier; // std::string premadeLevelSpec[MAX_CLASSES][10][91]; //lvl 10 - 100 // ClassSpecs classSpecs[MAX_CLASSES]; std::string premadeSpecName[MAX_CLASSES][MAX_SPECNO]; std::string premadeSpecGlyph[MAX_CLASSES][MAX_SPECNO]; std::vector parsedSpecGlyph[MAX_CLASSES][MAX_SPECNO]; std::string premadeSpecLink[MAX_CLASSES][MAX_SPECNO][MAX_LEVEL]; std::string premadeHunterPetLink[3][21]; std::vector> parsedSpecLinkOrder[MAX_CLASSES][MAX_SPECNO][MAX_LEVEL]; std::vector> parsedHunterPetLinkOrder[3][21]; uint32 randomClassSpecProb[MAX_CLASSES][MAX_SPECNO]; uint32 randomClassSpecIndex[MAX_CLASSES][MAX_SPECNO]; std::string commandPrefix, commandSeparator; std::string randomBotAccountPrefix; uint32 randomBotAccountCount; bool randomBotRandomPassword; bool deleteRandomBotAccounts; uint32 randomBotGuildCount, randomBotGuildSizeMax; bool deleteRandomBotGuilds; std::vector randomBotGuilds; std::vector pvpProhibitedZoneIds; std::vector pvpProhibitedAreaIds; bool fastReactInBG; bool randombotsWalkingRPG; bool randombotsWalkingRPGInDoors; uint32 minEnchantingBotLevel; uint32 limitEnchantExpansion; uint32 limitGearExpansion; uint32 randombotStartingLevel; bool enablePeriodicOnlineOffline; float periodicOnlineOfflineRatio; bool gearscorecheck; bool randomBotPreQuests; bool guildTaskEnabled; uint32 minGuildTaskChangeTime, maxGuildTaskChangeTime; uint32 minGuildTaskAdvertisementTime, maxGuildTaskAdvertisementTime; uint32 minGuildTaskRewardTime, maxGuildTaskRewardTime; uint32 guildTaskAdvertCleanupTime; uint32 guildTaskKillTaskDistance; uint32 iterationsPerTick; std::mutex m_logMtx; std::vector tradeActionExcludedPrefixes; std::vector allowedLogFiles; std::unordered_map> logFiles; std::vector botCheats; uint32 botCheatMask = 0; struct worldBuff { uint32 spellId; uint32 factionId; uint32 classId; uint32 specId; uint32 minLevel; uint32 maxLevel; }; std::vector worldBuffs; uint32 commandServerPort; bool perfMonEnabled; bool summonWhenGroup; bool randomBotShowHelmet; bool randomBotShowCloak; bool randomBotFixedLevel; bool disableRandomLevels; float randomBotXPRate; uint32 randomBotAllianceRatio; uint32 randomBotHordeRatio; bool disableDeathKnightLogin; bool limitTalentsExpansion; uint32 botActiveAlone; uint32 BotActiveAloneForceWhenInRadius; bool BotActiveAloneForceWhenInZone; bool BotActiveAloneForceWhenInMap; bool BotActiveAloneForceWhenIsFriend; bool BotActiveAloneForceWhenInGuild; bool botActiveAloneSmartScale; uint32 botActiveAloneSmartScaleDiffLimitfloor; uint32 botActiveAloneSmartScaleDiffLimitCeiling; uint32 botActiveAloneSmartScaleWhenMinLevel; uint32 botActiveAloneSmartScaleWhenMaxLevel; bool freeMethodLoot; int32 lootRollLevel; std::string autoPickReward; bool autoEquipUpgradeLoot; float equipUpgradeThreshold; bool twoRoundsGearInit; bool syncQuestWithPlayer; bool syncQuestForPlayer; bool dropObsoleteQuests; std::string autoTrainSpells; bool autoPickTalents; bool autoUpgradeEquip; int32 hunterWolfPet; int32 defaultPetStance; int32 petChatCommandDebug; bool autoLearnTrainerSpells; bool autoDoQuests; bool enableNewRpgStrategy; std::unordered_map RpgStatusProbWeight; bool syncLevelWithPlayers; bool autoLearnQuestSpells; bool autoTeleportForLevel; bool randomBotGroupNearby; int32 enableRandomBotTrading; uint32 tweakValue; // Debugging config uint32 randomBotArenaTeamCount; uint32 randomBotArenaTeamMaxRating; uint32 randomBotArenaTeamMinRating; uint32 randomBotArenaTeam2v2Count; uint32 randomBotArenaTeam3v3Count; uint32 randomBotArenaTeam5v5Count; bool deleteRandomBotArenaTeams; std::vector randomBotArenaTeams; uint32 selfBotLevel; bool downgradeMaxLevelBot; bool equipmentPersistence; int32 equipmentPersistenceLevel; int32 groupInvitationPermission; bool keepAltsInGroup = false; bool KeepAltsInGroup() const { return keepAltsInGroup; } bool allowSummonInCombat; bool allowSummonWhenMasterIsDead; bool allowSummonWhenBotIsDead; int reviveBotWhenSummoned; bool botRepairWhenSummon; bool autoInitOnly; float autoInitEquipLevelLimitRatio; int32 maxAddedBots; int32 addClassCommand; int32 addClassAccountPoolSize; int32 maintenanceCommand; bool altMaintenanceAttunementQs, altMaintenanceBags, altMaintenanceAmmo, altMaintenanceFood, altMaintenanceReagents, altMaintenanceConsumables, altMaintenancePotions, altMaintenanceTalentTree, altMaintenancePet, altMaintenancePetTalents, altMaintenanceClassSpells, altMaintenanceAvailableSpells, altMaintenanceSkills, altMaintenanceReputation, altMaintenanceSpecialSpells, altMaintenanceMounts, altMaintenanceGlyphs, altMaintenanceKeyring, altMaintenanceGemsEnchants; int32 autoGearCommand, autoGearCommandAltBots, autoGearQualityLimit, autoGearScoreLimit; uint32 useGroundMountAtMinLevel; uint32 useFastGroundMountAtMinLevel; uint32 useFlyMountAtMinLevel; uint32 useFastFlyMountAtMinLevel; // stagger flightpath takeoff uint32 delayMin; uint32 delayMax; uint32 gapMs; uint32 gapJitterMs; std::string const GetTimestampStr(); bool hasLog(std::string const fileName) { return std::find(allowedLogFiles.begin(), allowedLogFiles.end(), fileName) != allowedLogFiles.end(); }; bool openLog(std::string const fileName, char const* mode = "a"); bool isLogOpen(std::string const fileName) { auto it = logFiles.find(fileName); return it != logFiles.end() && it->second.second; } void log(std::string const fileName, const char* str, ...); void loadWorldBuff(); static std::vector> ParseTempTalentsOrder(uint32 cls, std::string temp_talents_order); static std::vector> ParseTempPetTalentsOrder(uint32 spec, std::string temp_talents_order); bool restrictHealerDPS = false; std::vector restrictedHealerDPSMaps; bool IsRestrictedHealerDPSMap(uint32 mapId) const; std::vector excludedHunterPetFamilies; }; #define sPlayerbotAIConfig PlayerbotAIConfig::instance() #endif