/* * Copyright (C) 2016+ AzerothCore , released under GNU GPL v2 license, you may redistribute it * and/or modify it under version 2 of the License, or (at your option), any later version. */ #ifndef _PLAYERBOT_PLAYERbotAICONFIG_H #define _PLAYERBOT_PLAYERbotAICONFIG_H #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, maxMask = 32 }; enum class HealingManaEfficiency : uint8 { VERY_LOW = 1, LOW = 2, MEDIUM = 4, HIGH = 8, VERY_HIGH = 16, SUPERIOR = 32 }; #define MAX_SPECNO 20 #define MAX_WORLDBUFF_SPECNO 3 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 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; uint32 openGoSpell; bool randomBotAutologin; bool botAutologin; std::string randomBotMapsAsString; float probTeleToBankers; std::vector randomBotMaps; std::vector randomBotQuestItems; std::vector randomBotAccounts; std::vector randomBotSpellIds; std::vector randomBotQuestIds; uint32 randomBotTeleportDistance; float randomGearLoweringChance; 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 permanantlyInWorldTime; uint32 minRandomBotPvpTime, maxRandomBotPvpTime; uint32 randomBotsPerInterval; uint32 minRandomBotsPriceChangeInterval, maxRandomBotsPriceChangeInterval; bool randomBotJoinLfg; // 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; 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; 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 allowedLogFiles; std::unordered_map> logFiles; std::vector botCheats; uint32 botCheatMask = 0; struct worldBuff { uint32 spellId; uint32 factionId = 0; uint32 classId = 0; uint32 specId = 0; uint32 minLevel = 0; uint32 maxLevel = 0; }; std::vector worldBuffs; uint32 commandServerPort; bool perfMonEnabled; bool summonWhenGroup; bool randomBotShowHelmet; bool randomBotShowCloak; bool randomBotFixedLevel; bool disableRandomLevels; float playerbotsXPrate; 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; bool autoLearnTrainerSpells; bool autoDoQuests; bool enableNewRpgStrategy; bool syncLevelWithPlayers; bool freeFood; 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 allowSummonInCombat; bool allowSummonWhenMasterIsDead; bool allowSummonWhenBotIsDead; int reviveBotWhenSummoned; bool botRepairWhenSummon; bool autoInitOnly; float autoInitEquipLevelLimitRatio; int32 maxAddedBots; int32 addClassCommand; int32 addClassAccountPoolSize; int32 maintenanceCommand; int32 autoGearCommand, autoGearCommandAltBots, autoGearQualityLimit, autoGearScoreLimit; uint32 useGroundMountAtMinLevel; uint32 useFastGroundMountAtMinLevel; uint32 useFlyMountAtMinLevel; uint32 useFastFlyMountAtMinLevel; 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(uint32 factionId, uint32 classId, uint32 specId, uint32 minLevel, uint32 maxLevel); static std::vector> ParseTempTalentsOrder(uint32 cls, std::string temp_talents_order); static std::vector> ParseTempPetTalentsOrder(uint32 spec, std::string temp_talents_order); }; #define sPlayerbotAIConfig PlayerbotAIConfig::instance() #endif