mirror of
https://github.com/liyunfan1223/mod-playerbots.git
synced 2026-06-20 15:39:25 +02:00
<img width="1274" height="952" alt="druids" src="https://github.com/user-attachments/assets/7390d7e5-ed99-4eb3-8802-8c2f457d7c86" /> Hello playerbots community!! After my pvp gear update, I was itching to get back to class strategies. I was testing raids, and noticed that druids... Well, they kinda sucked. They had glaring issues, would randomly die from bugs, and overall felt bad. Looking at issues discussed on github/discord, I decided to start working on a druid update. I started with the boomkin, and made a boomkin PR, but there were some technical issues with the storing of the eclipse mapping not clearing, and it was not good... I closed that PR, and went back to the drawing board, with one goal in mind: Make the druid class function as best as possible WHILST keeping the code consistent with what already exists. There is a TON of _yoink and twist_ (copy and paste with or without slight edits), and anything that is custom/new is discussed in the section below. I am very proud and excited to release this though - after 45 days of coding and testing, the druid finally feels good to have in the group. Disclaimer - this PR aims to address bugs, utility, and overall performance of Druids. It will not magically make them top DPS. I have done hours of testing, and druids can occasionally top the charts - but inconsistently. Boomkins are inconsistent due to Eclipse (until later gear phases), and Feral Cats are incredibly dependent on positioning, timing, combo points, energy, clearcasting procs... The stars have to align for things to go right for the Cat (It doesn't help that all movement, targeting, and actions are ran through the same engine, so cats really suffer in boss fights with scripted movement) But the changes I have made help those situations occur a fair bit more frequently. Let's dive in! <!-- Thank you for contributing to mod-playerbots, please make sure that you... 1. Submit your PR to the test-staging branch, not master. 2. Read the guidelines below before submitting. 3. Don't delete parts of this template. DESIGN PHILOSOPHY: We prioritize STABILITY, PERFORMANCE, AND PREDICTABILITY over behavioral realism. Every action and decision executes PER BOT AND PER TRIGGER. Small increases in logic complexity scale poorly across thousands of bots and negatively affect all. We prioritize a stable system over a smarter one. Bots don't need to behave perfectly; believable behavior is the goal, not human simulation. Default behavior must be cheap in processing; expensive behavior must be opt-in. Before submitting, make sure your changes aligns with these principles. --> ## Pull Request Description <!-- Describe what this change does and why it is needed --> A druid overhaul across all four specs — new Cat stealth and CC systems, Eclipse tracking and rotation fixes for Balance, a Bear threat rotation rework, a Resto healing priority overhaul, and a restructured CC and AoE strategy architecture. --- ## Talent & Glyph Config - **Balance:** Moved points out of Improved Moonfire and into Nature's Reach for threat reduction and extended cast range. - **Bear:** Moved points out of King of the Jungle (15% enrage damage) and into Feral Instinct for increased Swipe damage and AoE threat. - **Cat:** Swapped the Glyph of Typhoon (useless for feral) for Glyph of Dash, which benefits the cat a ton in prowl. - **Resto:** Swapped Glyph of Rejuvenation for Glyph of Nourish (better HPS for difficult content), and Glyph of Typhoon (useless for resto) for Glyph of Dash. Moved one point from Nature's Bounty to Empowered Touch. --- ## Balance - **New skill - Typhoon:** Added Typhoon, triggered by "enemy within melee," using cone targeting logic ported from Cone of Cold. Typhoon is from the "balance pvp" spec only, and is housed in the shared AoE strategy. - **New skill - Cyclone:** Added Cyclone targeting the RTI CC-marked target (default moon). Incapacitates for 6 seconds with full damage immunity — cannot be broken by AoE. Priority 24.0f > Hibernate (23.0f) > Entangling Roots (22.0f). *(See CC Implementation in the code notes below.)* - **Bug fix - Eclipse cooldown tracking:** Eclipse procs referenced a cooldown not registered in the database, so boomkins immediately reverted to the wrong filler after an Eclipse buff fell off. Fixed with manual timestamp tracking. *(See Eclipse Cooldown Tracking in the code notes below.)* - **Bug fix — Starfall no longer pulls out-of-combat hostile enemies:** Previously fired on cooldown regardless of surroundings — its 36-yard radius (the largest AoE in the game) could silently pull entire unengaged packs. Now suppressed if any non-combat hostile NPC is within 40 yards. *(See Starfall Pull Safety in the code notes below.)* - **Filler changed to Starfire:** Starfire is now the filler (priority 5.4) over Wrath (5.3). Starfire has a 100% spellpower coefficient vs. Wrath's 12%, is more mana-efficient per point of damage, and has a 100% eclipse proc chance on crit vs. Wrath's 40%. In practice this significantly reduced mana consumption, especially before level 40 when Moonkin Form's mana-on-crit passive isn't available. - **Moonfire / Insect Swarm on Attacker rework:** Previously tied to the light AoE trigger (2+ enemies, 13.0f), causing low-level boomkins to multi-dot instead of casting fillers — mana-inefficient at low levels where targets rarely live long enough to tick the full DoT. Re-added as dedicated on-attacker triggers at lower priority than the fillers, so they fire only as a movement fallback. The triggers have been changed to override the TTL check (time to life), similar to the warlocks DoTs. - **Hurricane channel check rework:** Previously cancelled based on distance from the bot — enemies could leave the AoE but remain within 30 yards, keeping the channel alive. Now reads the Hurricane DynamicObject's actual radius and counts only attackers physically inside it. *(See Hurricane Channel Cancel in the code notes below.)* --- ## Cat - **Prowl (Stealth):** Implemented using the same logic as the existing Rogue stealth system. The bot enters Prowl when out of combat and a target is within range. Engagement distances are: - 30 yards baseline - −10 yards if the target already has a victim (engaged in combat) - −10 more yards if the target is also moving (minimum 10 yards) - +15 yards in Battlegrounds or Arenas - Enemy player targets take priority over grind/DPS targets when evaluating distance. - **Prowl openers:** The bot approaches the target in Prowl and opens based on approach angle and level: - **From behind:** Ravage (learned at level 32). Before Ravage is learned, Shred is used as the opener. - **From the front:** Pounce (stun + bleed, learned at level 36). Before Pounce is learned, Claw is used as the opener. - **New skill - Maim:** Added Maim as a 5 second stun-finisher at 5 combo points, but only against player targets. It will only fire when Rip and Savage Roar are already active. - **Innervate on healer:** Cats now cast Innervate when a healer drops below the low mana threshold (`AiPlayerbot.LowMana`, default 15%). *(See Healer Low Mana Framework in the code notes below for the shared value/trigger infrastructure backing this.)* - **Predator's Swiftness with CC spells:** Added a twotrigger pairing Predator's Swiftness (the instant-cast proc from finishing moves) with the existing CC triggers (Cyclone, Hibernate, Entangling Roots). Feral cats can now instant-cast CC the RTI CC-marked target (default moon) after a finisher using the Predator's Swiftness proc. - **Predator's Swiftness with Rebirth:** Added a twotrigger pairing Predator's Swiftness with the combat resurrection trigger. Cats can now use a Predator's Swiftness proc to instantly cast Rebirth on a dead party member. - **Bug fix - Autoattack no longer breaks prowl:** `MeleeAction::isUseful()` now returns false while the bot has the Prowl aura, preventing autoattack from breaking stealth before an opener spell fires. The code comment notes this pattern should be reused for a future Rogue autoattack in stealth fix. - **Bug fix - Non-prowl skills no longer break prowl:** `isUseful()` overrides were added to Feral Charge (Cat), Mangle (Cat), Swipe (Cat), Rake to return false while Prowl is active, preventing accidental prowl breaks before the opener fires. - **Bug fix - Clearcasting proc with energy spells:** Added dedicated `ClearcastingTrigger` / action pairings to ensure Clearcasting procs are consumed immediately. On single target, Shred is used; on AoE, Swipe (Cat) is used. This prevents the cat from using it's valuable clearcasting proc on a low energy spell (rake, feral charge - cat, cower, etc). This also fixes a bug where Clearcasting would sometimes linger for 4+ seconds without being used, as energy-based spells do not recognize the free cast and would not fire until their energy condition was met. - **Tiger's Fury rework:** TF previously fired on cooldown as a default action, meaning the bot would use it at full or near-full energy and gain no benefit from the energy it generates. The trigger now requires energy to be below 30 before firing, ensuring the bot recovers the full 60 energy granted by the King of the Jungle talent. - **Faerie Fire (Feral) rework for cat:** With Omen of Clarity, spams on cooldown to fish for Clearcasting procs. Without it, applies as a normal debuff and does not reapply while active. *(See Faerie Fire (Feral) Trigger in the code notes below.)* - **Feral Charge toggleable strategy:** Feral Charge (Cat) is now housed in a dedicated `feral charge` strategy, enabled by default for Cat druids. It can be disabled with `co -feral charge` and re-enabled with `co +feral charge`. Disabling this strategy can be useful for encounters where charging in would be unfavorable. - **Rake on Melee Attackers removed:** The Rake on Melee Attackers action was removed from the Cat AoE strategy. Applying Rake to multiple attackers and spreading out combo points produced far lower AoE DPS than simply continuing the single-target rotation. - **Antiquated Omen of Clarity framework removed:** `OmenOfClarityTrigger` and `CastOmenOfClarityAction` were not functional and have been removed. The `ClearcastingTrigger` appropriately tracks Omen of Clarity procs. I believe this was from TBC when Omen of Clarity was a spell. --- ## Bear - **Berserk tracking for Mangle:** A `berserk active` trigger fires Mangle (Bear) at priority 25.0f while Berserk is up. Previously, Mangle sat at 5.5f in the default actions while Swipe (Bear) sat at 25.0f on the light AoE trigger — meaning in any 2+ enemy encounter, Swipe would always win regardless of Berserk. Now Mangle (25.0f) sits above the AoE triggers (24.5f), so it takes priority during Berserk. It's pretty cool to see a Bear's dps on pull! - **Faerie Fire (Feral) rework:** Previously applied once and stopped. Now spams on cooldown for continuous threat generation (~3.5k threat per cast at level 80), and serves as a ranged soft-taunt fallback on the `lose aggro` trigger when Growl is on cooldown. *(See Faerie Fire (Feral) Trigger in the code notes below.)* - **Lacerate rework:** Previously, lacerate was a low priority default action and bears had no duration awareness. They would occasionally let 5 stacks of Lacerate fall off, resulting in pretty significant threat loss. Now, `LacerateTrigger` fires when the target has no Lacerate debuff, the stack count is below 5, or the remaining duration is ≤ 6 seconds. - **Demoralizing Roar on single target:** Previously, Demoralizing Roar only fired on the medium AoE trigger (3+ enemies, skipped on bosses). A dedicated trigger now applies it in any encounter, provided Vindication, Demoralizing Shout, or Curse of Weakness are not already present, as they don't stack with Demoralizing Roar. - **Bug fix - Rebirth on bears:** Bears no longer attempt to cast Rebirth in combat. The generic combat resurrection trigger was firing for all druid specs, causing bears to shift out of Dire Bear Form mid-fight to cast Rebirth — dropping their armor and HP while still holding aggro. Lots of sudden tank deaths... - **Feral Charge toggleable strategy:** Feral Charge (Bear) is now housed in a dedicated `feral charge` strategy, enabled by default for Bear druids. It can be disabled with `co -feral charge` and re-enabled with `co +feral charge`. Disabling this strategy can be useful for encounters where charging in would be unfavorable. --- ## Resto - **Blanketing strategy:** Added a `blanketing` strategy (enabled by default, `co -blanketing` to disable) that pre-HoTs group members with Wild Growth and Rejuvenation regardless of current health, prioritizing tanks → melee → ranged to maximize Revitalize uptime. *(See Blanketing Strategy in the code notes below.)* - **Nature's Swiftness → instant Healing Touch combo:** Nature's Swiftness was previously included in the boost strategy, where it would fire proactively on cooldown regardless of context. This wasted the proc on situations where it provided no benefit. It is now exclusively reactive — triggered at high priority (56.0f) when a party member hits critical health. A paired `nature's swiftness active` trigger then immediately fires Healing Touch (55.0f) on the lowest-health party member, consuming the proc as an instant-cast emergency heal. - **Lifebloom priority lowered (29.0f → 13.0f):** Lifebloom on the main tank is cast on Omen of Clarity procs. At 29.0f it previously outprioritised all low health reactive healing (21.4f), meaning a Clearcasting proc while a party member was at 25–44% HP would cause the bot to cast Lifebloom on the tank instead of Swiftmend or Nourish on the injured target. Lowered to 13.0f so it fires only when no reactive healing is queued. - **Healing spell priority order reworked:** All three reactive categories (critical, low, medium) now follow the same sequence: Swiftmend → Wild Growth → Nourish → Regrowth → Healing Touch. - **Tranquility toggleable strategy:** Tranquility is now housed in a dedicated `tranquility` strategy, enabled by default for Resto druids. It can be disabled with `co -tranquility`. In raids, Tranquility only heals the druid's own group — not the full raid — making it situationally poor during raid-wide damage or heavy movement phases. Disabling this strategy lets players suppress the cast on those encounters without affecting the rest of the healing rotation. --- ## CC & Strategy - **Boost strategy:** The boost strategy is assigned to all druid specs by default. It is spec-gated internally — Balance druids use it for Force of Nature (treants on cooldown), and Feral druids (both cat and bear) use it for Berserk. - **CC strategy enabled by default:** The CC strategy was previously not assigned to druids by default. It is now enabled for Balance and Feral Cat, with behavior gated by spec: - Balance receives the full RTI CC trigger set (Cyclone, Hibernate, Entangling Roots). - Feral cats only receive RTI CC triggers when Predator's Swiftness is active (see above). - **AoE strategy reorganized:** All AoE spells — Hurricane, Starfall, Typhoon, Swipe (Cat), and DoTs on attackers (Moonfire, Insect Swarm) — are now handled by the shared AoE strategy, consistent with how the rest of the playerbot project structures AoE logic. This does not affect Bear druids. - **Aquatic Form while submerged:** The non-combat strategy now shifts into Aquatic Form when the bot is fully submerged out of combat (`LIQUID_MAP_UNDER_WATER`). If the bot is in another shapeshift (Bear, Cat, Moonkin, Tree), it first shifts to caster form as a prerequisite before entering Aquatic Form. The trigger intentionally does not fire at the water surface (`LIQUID_MAP_IN_WATER`), or use the "swimming" trigger, because it caused the druid to loop caster form and aquatic form endlessly while surfaced. --- ## Code Consolidation & Refactoring - The Bear, Cat, Heal, and Caster strategy files have been renamed to Bear, Cat, Balance, and Resto respectively, to match the naming conventions used elsewhere in the project. - The Melee and Offheal strategy files have been deleted. The offheal healing logic is preserved in full — it now lives as an optional strategy (`CatOffhealStrategy`) inside `CatDruidStrategy`, sharing the same action node factories as the base cat strategy rather than duplicating them. - All action relevance values across the druid strategies have been converted from named constants (e.g. `ACTION_NORMAL`, `ACTION_HIGH + 4`) to explicit numerical floats (e.g. `10.0f`, `24.0f`). This makes priority ordering immediately visible in the source without needing to cross-reference the constant definitions. --- ## New Code & Project References ### Eclipse Cooldown Tracking (`DruidActions.cpp`) The previous implementation tracked the Eclipse cooldown using `EclipseSolarCooldownTrigger` and `EclipseLunarCooldownTrigger`, both of which extended `SpellCooldownTrigger` and called `bot->HasSpellCooldown(48517/48518)`. `SpellCooldownTrigger` is the standard project pattern for this — it works correctly for spells whose cooldowns are registered in the database. However, Eclipse (Solar) and Eclipse (Lunar) both have **Cooldown: n/a** in the DB. `HasSpellCooldown` always returned false, so boomkins never respected the cooldown and would revert to the wrong filler immediately after an Eclipse buff fell off. Since the cooldown can't be read from the DB, the fix tracks it manually. When `CastWrathAction::isUseful()` or `CastStarfireAction::isUseful()` detects that the corresponding Eclipse aura has become active, it records the current timestamp and suppresses the opposing filler for 30 seconds — the actual in-game cooldown duration. The timestamps are stored using `ManualSetValue<time_t>`, the same pattern as `LastSpellCastTimeValue` (`src/Ai/Base/Value/LastSpellCastTimeValue.h`), which is already used throughout the project to record when spells were last cast. Two new value classes — `EclipseSolarProcTimeValue` and `EclipseLunarProcTimeValue` — are registered in a new `DruidValueContextInternal` factory inside `DruidAiObjectContext.cpp`, following the same factory pattern as `DruidTriggerFactoryInternal` and `DruidAiObjectContextInternal` in the same file. Because these values live in the per-bot `AiObjectContext`, they are automatically destroyed when the bot logs out — no manual cleanup needed, and no shared state between bots. --- ### Healer Low Mana Framework (`PartyMemberToHeal.h/.cpp`, `HealthTriggers.h/.cpp`, `ValueContext.h`, `TriggerContext.h`) `HealerLowMana` and `HealerLowManaTrigger` are added to the shared base framework rather than the druid-specific code. Currently used by the Cat Innervate trigger; designed so Mana Tide Totem, Hymn of Hope, and similar spells from other classes can hook into the same trigger without duplicating the group-scanning logic. The pair follows the same pattern as the existing `PartyMemberToHeal` / `PartyMemberLowHealthTrigger` — the project's standard design for "scan the group for the most in-need member, then trigger when that member crosses a threshold." **Value** (`HealerLowMana : PartyMemberValue`): `Calculate()` walks the group reference list, skips non-healers via the existing `IsHeal()` check, and uses `MinValueCalculator` to return the lowest-mana healer as a `Unit*`. Registered in `ValueContext.h` under the key `"healer low mana"`. **Trigger** (`HealerLowManaTrigger : Trigger`): `GetTargetName()` returns `"healer low mana"`, which the base `Trigger::GetTarget()` resolves against the value context — exactly how `PartyMemberLowHealthTrigger::GetTargetName()` returns `"party member to heal"`. `IsActive()` calls `GetTarget()` and checks `GetPowerPct(POWER_MANA) < sPlayerbotAIConfig.lowMana`. The trigger doesn't extend `HealthInRangeTrigger` because that class is specifically for health (it reads the `"health"` value). Mana requires a direct `GetPowerPct(POWER_MANA)` call, so a plain `Trigger` with a custom `IsActive()` is used instead. Both are registered in the global `ValueContext.h` and `TriggerContext.h` rather than a class-specific factory, consistent with how all other `PartyMemberValue` subclasses are registered in the project. --- ### Blanketing Strategy (`RestoDruidStrategy.h/.cpp`, `DruidActions.h/.cpp`, `DruidAiObjectContext.cpp`) **Strategy structure:** `DruidBlanketStrategy` is a standalone `Strategy` overlay, not embedded inside `RestoDruidStrategy`. This is the same pattern as `DruidTranquilityStrategy`, `DruidBoostStrategy`, and `DruidCcStrategy` — additive overlays that layer behavior on top of the base strategy and can be toggled independently via `co +/-blanketing`. **Triggers:** Both `"wild growth blanket"` and `"rejuvenation blanket"` are instantiated as `BuffOnPartyTrigger(ai, spellName)` — the project's existing class from `GenericTriggers.h` for party-wide buff maintenance, used throughout the codebase for things like Blessings and Mark of the Wild. `BuffOnPartyTrigger` extends `BuffTrigger` and fires when any party member is missing the named aura. No custom trigger class was needed. **Actions:** Both actions inherit from a shared `CastBlanketHotAction` base that itself extends `CastSpellAction`. Inheriting from `CastSpellAction` means `isPossible()` is handled for free — spell known, off cooldown, target reachable, resources available. The constructor sets `range = botAI->GetRange("heal")` to use the standard healing range. **`GetBlanketTarget(auraName)`:** The custom part of the implementation. Walks the group in three prioritized passes — tanks first, then melee non-tanks, then ranged — returning the first eligible member found. Eligible is defined as: alive, not a GM, within `spellDistance`, and `!botAI->HasAura(auraName, member, false, true)` (not already carrying the HoT). Returns nullptr if every member is already covered. **`isUseful()`:** On both actions simply returns `GetTarget() != nullptr` — fires as long as `GetBlanketTarget` finds someone without the HoT, and suppresses itself the moment all targets are covered. --- ### CC Implementation — Cyclone, Hibernate, Entangling Roots (`DruidTriggers.h/.cpp`, `DruidActions.h/.cpp`, `GenericDruidStrategy.cpp`) The druid CC spells use the project's strict RTI-only pattern rather than the fallback "best candidate" pattern used by other classes (e.g., Mage Polymorph). **`"rti cc target"` value:** A direct raid icon lookup. Reads the `"rti cc"` string value (default `"moon"`, configurable per-bot via `rti cc <icon>`), converts it to a raid icon index, and returns the live `Unit*` for that GUID. If no CC icon is set, it returns `nullptr`. There is no fallback to a best-candidate scan. **Triggers** (`CycloneTrigger`, `HibernateTrigger`, `EntanglingRootsTrigger`): All three extend `HasCcTargetTrigger` and override `IsActive()`. The first check is always `"rti cc target"` — if it returns `nullptr`, the trigger is immediately silent. If an icon is set, it checks `"cc target"` (with the spell name as a qualifier) to verify the RTI target matches and delegates to `HasCcTargetTrigger::IsActive()`, which handles the "don't re-cast while already CC'd" check. **Actions** (`CastCycloneCcAction`, `CastHibernateCcAction`, `CastEntanglingRootsCcAction`): All three extend `CastCrowdControlSpellAction` rather than plain `CastSpellAction`. The action names are `"cyclone on cc"`, `"hibernate on cc"`, `"entangling roots on cc"` — not the raw spell names. This matters because `CastSpellAction` stores its constructor argument as both the action name and the spell name, and `isPossible()` calls `CanCastSpell(spell, target)` using that string. Passing `"cyclone on cc"` to `CastSpellAction` would resolve to spell ID 0 and silently return false forever. `CastCrowdControlSpellAction` keeps the spell name separate from the action name, avoiding this. `GetTargetValue()` on all three returns `context->GetValue<Unit*>("rti cc target")` directly. **Form prerequisite:** The action nodes for `"cyclone on cc"` and `"hibernate on cc"` have `NextAction("caster form")` as a prerequisite, so the bot automatically shifts out of Bear, Cat, or Moonkin form before casting. Entangling Roots has the same prerequisite. **Priority order:** Cyclone (24.0f) > Hibernate (23.0f) > Entangling Roots (22.0f). Cyclone is preferred because it works on any target type and the target is immune to all damage and healing while cycloned — it cannot be broken by AoE. Hibernate is beast/dragonkin only. Entangling Roots can be broken by damage. **Feral Cat CC:** Wired through `TwoTrigger` pairings with `"predator's swiftness"` (see Cat section above). Because the Predator's Swiftness proc makes the spell instant-cast, no form shift is needed — the cat casts directly from Cat Form after a finisher. --- ### Ferocious Bite Execute (`DruidTriggers.h`, `DruidCatActions.h`, `CatDruidStrategy.cpp`) Two separate triggers fire the same `CastFerociousBiteAction`, which is a plain `CastMeleeSpellAction` with no custom logic — all the intelligence lives in the triggers. **`FerociousBiteTimeTrigger`** ("ferocious bite time", 22.5f) — the normal rotation path. Requires 5 combo points, Savage Roar active with >10 seconds remaining, and Rip active on the target with >10 seconds remaining. The duration checks prevent spending combo points on Ferocious Bite when either buff is about to fall off and needs to be refreshed first. **`FerociousBiteExecuteTrigger`** ("ferocious bite execute", 24.0f) — the execute window, higher priority than the time trigger. Requires only 1 combo point, and fires when the target is below **both** 25% HP and 20,000 absolute HP. The dual condition is the key design detail: the 25% threshold alone would trigger on a raid boss at 25% health — which could still be millions of HP remaining. The 20,000 HP cap ensures the execute behavior only activates when the target is genuinely close to death, at which point dumping even a partial combo point buildup into Ferocious Bite is better than continuing a normal builder-spender cycle. --- ### Faerie Fire (Feral) Trigger (`DruidTriggers.h`) A single `FaerieFireFeralTrigger` class handles both Bear and Cat with spec-branched behavior inside `IsActive()`. It extends `DebuffTrigger` — the project's standard class for debuff maintenance on the current target — but overrides `IsActive()` to produce three distinct behaviors depending on form and talent state: **Bear:** Bypasses `DebuffTrigger::IsActive()` entirely. Returns true whenever the target is alive and in world, regardless of whether the debuff is already present. Every cast generates immediate threat and damage, so there is no reason to wait for it to fall off before recasting. **Cat with Omen of Clarity (talent aura 16864):** Same bypass — spams on cooldown to fish for Clearcasting procs. Faerie Fire (Feral) has no energy cost, making it a free input that can proc Omen of Clarity on any hit. **Cat without Omen of Clarity:** Falls through to `DebuffTrigger::IsActive()` — the standard base class behavior, which checks: target alive and in world, debuff not already present (`!botAI->HasAura("faerie fire (feral)", target)`), and estimated remaining lifetime of the target is at least `needLifeTime` seconds (default 8.0f — no point applying a 30-second debuff to something about to die). Applied as a normal debuff; does not reapply while active. Both spam paths additionally guard against Prowl — `IsActive()` returns false while the bot has the Prowl aura to prevent casting from breaking stealth. **Strategy wiring:** - Bear: standard rotation slot at 17.0f, plus wired into the `"lose aggro"` trigger at 25.5f as a soft-taunt fallback when Growl is on cooldown. - Cat: low-priority filler at 5.0f. --- ### Starfall Pull Safety (`DruidActions.cpp`) Starfall's 36-yard AoE radius is the largest in the game. A single cast near an unengaged patrol or mob pack would silently pull everything in that area. The previous implementation fired on cooldown with no awareness of the surrounding area. `CastStarfallAction::isUseful()` now applies two guards before allowing the cast: **CC safety check** (standard project pattern): reads `"current cc target"` and `"aoe position"`; suppresses the cast if the CC'd target is within `aoeRadius` of the bot's AoE position. **Unengaged hostile NPC scan (custom)**: reads `"nearest hostile npcs"` (`NearestHostileNpcsValue`), which uses the project's standard `Acore::AnyUnitInObjectRangeCheck` + `Cell::VisitObjects` grid searcher at `sightDistance` (~50 yards). The value pre-filters via `AcceptUnit()`: non-players only, and `unit->IsHostileTo(bot)` must be true — this excludes neutral-faction trigger creatures, dummies, and invisible spawns that would otherwise appear in a raw range scan. The loop then applies four additional filters: - Skip null / dead / out-of-world units (standard guard). - Skip the current target — it is the reason we're in combat; its in-combat flag is already covered. - Skip `!bot->IsValidAttackTarget(unit)` — safety net for hostile-faction trigger creatures carrying `UNIT_FLAG_NON_ATTACKABLE` that `IsHostileTo` alone doesn't filter. - Skip units beyond 40 yards — Starfall's listed radius is 36; 40 adds a small buffer for patrols about to enter range. If any remaining unit is `!unit->IsInCombat()`, the cast is suppressed — that mob is unengaged and would be pulled. **Why `"nearest hostile npcs"` and not `"attackers"`:** `attackers` only contains units currently targeting the bot. We need to scan all hostile units in the area, not just those already aggro'd. --- ### Hurricane Channel Cancel (`DruidTriggers.h/.cpp`, `GenericDruidStrategy.cpp`) The previous cancel condition checked whether fewer than 3 enemies were within 30 yards of the bot. This is a poor proxy — enemies could scatter laterally but still sit within that radius, keeping the channel alive while none of them were taking damage. The replacement is `HurricaneChannelCheckTrigger`, which locates the actual Hurricane `DynamicObject` on the field and measures from it directly. **`IsActive()` logic:** 1. Checks `bot->GetCurrentSpell(CURRENT_CHANNELED_SPELL)` — if the bot isn't channeling at all, returns false immediately. If it is channeling but the spell isn't a Hurricane rank, also returns false. This check is necessary because `CURRENT_CHANNELED_SPELL` is a slot, not a specific spell — the same cancel action is reused for other channeled spells in the codebase, so the trigger must verify it's specifically Hurricane before acting. 2. Iterates through `HURRICANE_SPELL_IDS` (all five ranks: 16914, 17401, 17402, 27012, 48467) calling `bot->GetDynObject(spellId)` until a non-null result is found. Hurricane places a `DynamicObject` on the field that the server uses as the actual AoE cylinder — each damage tick queries which units are inside it. The DynamicObject is keyed by spell ID, so the trigger must try each rank to find whichever one the bot currently has learned and placed. 3. Reads `dynObj->GetRadius()` — the actual radius stored on the DynamicObject itself rather than a hardcoded constant. This matches exactly what the server uses to calculate damage, so the trigger's cancel condition is spatially identical to the server's hit detection. 4. Walks the `"attackers"` GuidVector and counts how many live attackers are within `dynObj->GetRadius()` of the DynamicObject's position using `unit->GetDistance(dynObj->GetPosition()) <= radius`. 5. Returns `count < minEnemies` (default 3). The trigger fires — cancelling the channel — when fewer than 3 attackers are physically inside the Hurricane AoE. **Why `"attackers"` and not a full area scan:** Hurricane only deals damage to units that are attacking the bot (or in its threat list). Scanning all nearby hostile units would cause premature cancellation if non-aggro'd enemies happened to be standing outside the AoE. Attackers is the right scope. **Strategy wiring:** The trigger is paired with `NextAction("cancel channel", 22.0f)` in the AoE strategy for both Balance and Resto druids. The cancel priority (22.0f) sits below the Hurricane cast priority (23.0f), so if the medium AoE trigger re-activates on the same tick the cancel fires — meaning enemies came back into range — the new cast wins over the cancel. --- ## Feature Evaluation <!-- If your PR is very minimal (comment typo, wrong ID reference, etc), and it is very obvious it will not have any impact on performance, you may skip these question. If necessary, a maintainer may ask you for them later. --> <!-- Please answer the following: --> - Describe the **minimum logic** required to achieve the intended behavior. Most new triggers are simple aura or cooldown checks. The heavier ones are the group scans (for the blanketing HoTs and the healer mana check), but these are identical in cost to group scans already running throughout the project (all of the party member health checks). The Starfall safety check is the only genuinely new scan — it looks for nearby hostile NPCs before allowing a cast, using the same grid search the project already uses elsewhere. That being said, it's loaded on the end of the trigger/action pairing - so in the StarfallNoCDTrigger, the bot has to already have learned starfall, already be in combat, and have Starfall off of cooldown and ready to use. The Hurricane cancel check only runs while the bot is actively channeling, so it's tightly gated. - Describe the **processing cost** when this logic executes across many bots. Negligible for almost everything in this PR. The vast majority of new logic is aura/buff/debuff lookups and cooldown checks that cost nothing at scale. The group scans for blanketing and healer mana follow the same pattern as existing party scans that already run on every healer bot every tick. No new unbounded operations, no shared state between bots. ## How to Test the Changes <!-- - Step-by-step instructions to test the change. - Any required setup (e.g. multiple players, number of bots, specific configuration). - Expected behavior and how to verify it. --> All druids perform a bit better now - I'd say test the branch out with the druids y'all currently use. JUST REMEMBER TO DO reset botAI or talents spec "x" again, since there have been some strategies changed!! The big one being the blanketing strategy for resto druids. They heal so much better now. Also being able to control when they pre-hot is really great. ## Impact Assessment <!-- As a generic test, before and after measure of pmon (playerbot pmon tick) can help you here. --> - Does this change increase per-bot/per-tick processing or risk scaling poorly with thousands of bots? - - [x] No, not at all - - [ ] Minimal impact (**explain below**) - - [ ] Moderate impact (**explain below**) Tested before an after with the same performance logs. I tested it with a 25 man group of only druids versus my normal 25 man group on several raid bosses - no difference in pmon. - Does this change modify default bot behavior? - - [ ] No - - [x] Yes (**explain why**) Druid bots currently have several bugs/issues with them. This doesn't exactly change the skills they were already using - just refines the scenarios in which they should be used. For example, a boomkin won't use starfall when there is a pack within range but not aggro'd. You can turn off feral charge for cat druids now, so they don't fly into a bosses aoe (locust swarm on anub, overload on iron council). Bear druids don't battle rez anymore. They just feel less clunky and heal/hold aggro better. - Does this change add new decision branches or increase maintenance complexity? - - [x] No - - [ ] Yes (**explain below**) There are only 2 changes to files outside of the druid strategy, which is the healer low mana framework and the modification to autoattack not being used while in prowl. ## AI Assistance <!-- AI assistance is allowed, but all submitted code must be fully understood, reviewed, and owned by the contributor. We expect contributors to be honest about what they do and do not understand. --> Was AI assistance used while working on this change? - - [ ] No - - [x] Yes (**explain below**) <!-- If yes, please specify: - Purpose of usage (e.g. brainstorming, refactoring, documentation, code generation). - Which parts of the change were influenced or generated, and whether it was thoroughly reviewed. --> AI was used heavily in the process to make this PR. First in the research necessary into how systems work, to the initial code implementation, to the testing results (explaining the outcome/why it sucks), to the fix, and then to the review of the code at the end. I will say that after I started researching how to use AI, use .md files for context, clearing sessions, I got a lot better results. I'll be the first to admit that it is 10 times easier to introduce a bug with AI than it is to solve one or implement something new. That is why every time it proposed a change, I asked it if the code was consistent with the project (Already present somewhere else) and if it wasn't, it was heavily scrutinized. It was written with Claude Code with Sonnet 4.6 (high), and peer reviewed by Github copilot. AI also made the description part of the PR, in which I modified myself. <!-- TRANSLATIONS: Anything new that the bots say in chat must be in a translatable format. This is done using GetBotTextOrDefault, which you can search for in the codebase to find examples. Your code needs to have English as the default fallback, while the full translations need to be in an SQL update file. The languages in the file are the nine language options supported by AzerothCore: English, Korean, French, German, Chinese, Taiwanese, Spanish, Spanish Mexico, and Russian. See data/sql/playerbots/updates/2025_12_27_ai_playerbot_fishing_text.sql as an example of a translation SQL update, whose content are called within the codebase at src/strategy/actions/FishingAction.cpp --> ## Final Checklist - - [x] Stability is not compromised. - - [x] Performance impact is understood, tested, and acceptable. - - [x] Added logic complexity is justified and explained. - - [x] Any new bot dialogue lines are translated. - - [x] Documentation updated if needed (Conf comments, WiKi commands). **Wiki commands** @Dreathean While this PR does add strategies, they are all enabled by default: co +feral charge (feral druids, both cat and bear) - enabled by default, allows/prevents the use of feral charge co +tranquility (resto druids) - enabled by default, allows/prevents the use of tranquility co +blanketing (resto druids) - enabled by default, allows the druid to pre-hot with wild growth and rejuvenation But it would be worth a mention on the wiki - there are scenarios where having these strategies disabled would be beneficial. ## Notes for Reviewers <!-- Anything else that's helpful to review or test your pull request. --> @kadeshar @Celandriel @brighton-chi Thank you for taking the time to look this over. There is a lot of copied code, a bit of new code (which is explained in the code explanation part of it, but please still ask questions), and a lot of refactoring. Please remember to reset the bot strategies before/after you test this branch, due to the several changes (blanketing, feral charge strategies). Reset with reset botAI or "talents spec balance pve" for any testers out there that didn't know. If/When this PR goes to the master branch, it will need to be noted to the people this same thing about resetting strategies.
2468 lines
98 KiB
Plaintext
2468 lines
98 KiB
Plaintext
##################################################
|
||
# PLAYERBOTS CONFIGURATION FILE #
|
||
##################################################
|
||
|
||
# Overview
|
||
# "Randombot": randomly generated bots that log in separately from players and populate the world. Randombots may automatically grind, quest, level up, and upgrade equipment and can be invited to groups and given commands.
|
||
# "AddClass bot": bots from the AddClassAccountPoolSize accounts. They are used for quickly adding a leveled and geared bot of any class to your party. They are recommended for a quick formation of a party.
|
||
# "Altbot": characters created on player accounts, which may be logged in by the player and invited to groups and given commands like randombots. They are best suited for long-progression playthroughs.
|
||
# Information about commands to control bots and set their strategies can be found on the wiki at https://github.com/mod-playerbots/mod-playerbots/wiki/Playerbot-Commands.
|
||
|
||
####################################################################################################
|
||
# SECTION INDEX
|
||
# GENERAL SETTINGS
|
||
# PLAYERBOTS SETTINGS
|
||
# GENERAL
|
||
# SUMMON OPTIONS
|
||
# MOUNT
|
||
# GEAR
|
||
# LOOTING
|
||
# TIMERS
|
||
# DISTANCES
|
||
# THRESHOLDS
|
||
# QUESTS
|
||
# COMBAT
|
||
# GREATER BUFFS STRATEGIES
|
||
# CHEATS
|
||
# SPELLS
|
||
# FLIGHTPATH
|
||
# PROFESSIONS
|
||
# RANDOMBOT-SPECIFIC SETTINGS
|
||
# GENERAL
|
||
# LEVELS
|
||
# GEAR
|
||
# QUESTS
|
||
# ACTIVITY
|
||
# SPELLS
|
||
# STRATEGIES
|
||
# RPG STRATEGY
|
||
# TELEPORTS
|
||
# BATTLEGROUND & ARENA & PVP
|
||
# RANDOM BOT TIMING AND BEHAVIOR
|
||
# PREMADE SPECS
|
||
# INFORMATION
|
||
# WARRIOR
|
||
# PALADIN
|
||
# HUNTER
|
||
# ROGUE
|
||
# PRIEST
|
||
# DEATH KNIGHT
|
||
# SHAMAN
|
||
# MAGE
|
||
# WARLOCK
|
||
# DRUID
|
||
# RANDOMBOT DEFAULT TALENT SPECS
|
||
# WARRIOR
|
||
# PALADIN
|
||
# HUNTER
|
||
# ROGUE
|
||
# PRIEST
|
||
# DEATH KNIGHT
|
||
# SHAMAN
|
||
# MAGE
|
||
# WARLOCK
|
||
# DRUID
|
||
# PLAYERBOTS SYSTEM SETTINGS
|
||
# DATABASE & CONNECTIONS
|
||
# DEBUG
|
||
# CHAT SETTINGS
|
||
# LOGS
|
||
# DEPRECIATED (TEMPORARY)
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
###################################
|
||
# #
|
||
# GENERAL SETTINGS #
|
||
# #
|
||
###################################
|
||
|
||
####################################################################################################
|
||
|
||
# Enable or disable Playerbots module
|
||
AiPlayerbot.Enabled = 1
|
||
|
||
# Enable randombot system
|
||
AiPlayerbot.RandomBotAutologin = 1
|
||
|
||
# Randombot count
|
||
AiPlayerbot.MinRandomBots = 500
|
||
AiPlayerbot.MaxRandomBots = 500
|
||
|
||
# Randombot accounts
|
||
# If you are not using any expansion at all, you may have to set this manually, in which case please
|
||
# ensure that RandomBotAccountCount is at least greater than (MaxRandomBots / 10 + AddClassAccountPoolSize)
|
||
# Default: 0 (automatic)
|
||
AiPlayerbot.RandomBotAccountCount = 0
|
||
|
||
# Delete all randombot accounts
|
||
# To apply this, set the number to 1 and run the Worldserver. Once deletion is complete, if you would
|
||
# like to recreate randombots, set the number back to 0 and rerun the Worldserver.
|
||
AiPlayerbot.DeleteRandomBotAccounts = 0
|
||
|
||
# Disable randombots when no real players are logged in
|
||
# Default: 0 (randombots will login when server starts)
|
||
# If enabled, randombots will only log in 30 seconds (default) after a real player logs in, and will
|
||
# log out 300 seconds (default) after all real players log out
|
||
AiPlayerbot.DisabledWithoutRealPlayer = 0
|
||
AiPlayerbot.DisabledWithoutRealPlayerLoginDelay = 30
|
||
AiPlayerbot.DisabledWithoutRealPlayerLogoutDelay = 300
|
||
|
||
####################################################################################################
|
||
|
||
###################################
|
||
# #
|
||
# PLAYERBOTS SETTINGS #
|
||
# #
|
||
###################################
|
||
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# GENERAL
|
||
#
|
||
#
|
||
|
||
# The maximum number of bots that a player can control simultaneously
|
||
AiPlayerbot.MaxAddedBots = 40
|
||
|
||
# Enable/Disable creating bots by addclass command (0 = GM only, 1 = enabled)
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AddClassCommand = 1
|
||
|
||
# Set the addclass command account pool size
|
||
AiPlayerbot.AddClassAccountPoolSize = 50
|
||
|
||
# Bot group invitation permission level (0 = GM only, 1 = accept based on level, 2 = always accept)
|
||
# Default: 1 (accept based on level)
|
||
AiPlayerbot.GroupInvitationPermission = 1
|
||
|
||
# Keep alt bots in the party even when the master leaves
|
||
# 0 = disabled (default behavior)
|
||
# 1 = enabled (prevents bots from automatically leaving the group)
|
||
AiPlayerbot.KeepAltsInGroup = 0
|
||
|
||
# Auto-login all player alts as altbots on player login
|
||
AiPlayerbot.BotAutologin = 0
|
||
|
||
# Allow/deny inviting altbots from the player's account
|
||
AiPlayerbot.AllowAccountBots = 1
|
||
|
||
# Allow/deny inviting altbots in the player's guild
|
||
AiPlayerbot.AllowGuildBots = 1
|
||
|
||
# Allow linking accounts for shared altbot control
|
||
AiPlayerbot.AllowTrustedAccountBots = 1
|
||
|
||
# Randombots will create guilds with nearby randombots
|
||
# Note: currently, randombots will not invite more bots after a guild is created,
|
||
# meaning randombot guilds will have only the 10 initial randombots needed to sign the charter
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.RandomBotGuildNearby = 0
|
||
|
||
# Number of guilds created by randombots
|
||
AiPlayerbot.RandomBotGuildCount = 20
|
||
|
||
# Maximum number of members in randombot guilds (minimum is hardcoded to 10)
|
||
AiPlayerbot.RandomBotGuildSizeMax = 15
|
||
|
||
# Delete all randombot guilds if set to 1
|
||
AiPlayerbot.DeleteRandomBotGuilds = 0
|
||
|
||
# Randombots will invite players to groups/raids/guilds
|
||
AiPlayerbot.RandomBotInvitePlayer = 0
|
||
|
||
# Bots will chat in say/guild when they invite other bots to groups/raids/guilds
|
||
AiPlayerbot.InviteChat = 0
|
||
|
||
# Bots will be automatically summoned to the player when they accept a group invitation
|
||
AiPlayerbot.SummonWhenGroup = 1
|
||
|
||
# Player can be activated as a bot (selfbot)
|
||
# Selfbot permission level (0 = disabled, 1 = GM only (default), 2 = all players, 3 = activate on login)
|
||
AiPlayerbot.SelfBotLevel = 1
|
||
|
||
# Non-GM player can only use init=auto to initialize bots based on their own level and gearscore
|
||
# Default: 0 (non-GM player can use any intialization commands)
|
||
AiPlayerbot.AutoInitOnly = 0
|
||
|
||
# The upper limit ratio of bot equipment level for init=auto
|
||
# Default: 1.0 (same with the player)
|
||
AiPlayerbot.AutoInitEquipLevelLimitRatio = 1.0
|
||
|
||
#
|
||
# AllowLearnTrainerSpells
|
||
# Description: Allow the bot to learn trainers' spells as long as it has the money.
|
||
# Default: 1 - (Enabled)
|
||
# 0 - (Disabled)
|
||
AiPlayerbot.AllowLearnTrainerSpells = 1
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# SUMMON OPTIONS
|
||
#
|
||
#
|
||
|
||
# Enable/Disable summoning bots when the master is in combat
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AllowSummonInCombat = 1
|
||
|
||
# Enable/Disable summoning bots when the master is dead
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AllowSummonWhenMasterIsDead = 1
|
||
|
||
# Enable/Disable summoning bots when they are dead (0 = only when the bots are ghosts, 1 = always)
|
||
# Default: 1 (always)
|
||
AiPlayerbot.AllowSummonWhenBotIsDead = 1
|
||
|
||
# Enable/Disable reviving bots when summoning them (0 = disabled, 1 = disabled in combat, 2 = enabled)
|
||
# Default: 1 (disabled in combat)
|
||
AiPlayerbot.ReviveBotWhenSummoned = 1
|
||
|
||
# Enable/Disable bots repairing gear when summoned
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.BotRepairWhenSummon = 1
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# MOUNT
|
||
#
|
||
#
|
||
|
||
# Defines at what level a bot will naturally use its 60% ground mount
|
||
# Note: was level 20 during WotLK, 30 during TBC, 40 during Vanilla
|
||
# Default: 20
|
||
AiPlayerbot.UseGroundMountAtMinLevel = 20
|
||
|
||
# Defines at what level a bot will naturally use its 100% fast ground mount
|
||
# Note: was level 40 during WotLK, 60 during Vanilla
|
||
# Default: 40
|
||
AiPlayerbot.UseFastGroundMountAtMinLevel = 40
|
||
|
||
# Defines at what level a bot will naturally use its 150% flying mount
|
||
# Note: was level 60 during WotLK, 70 during TBC
|
||
# Default: 60
|
||
AiPlayerbot.UseFlyMountAtMinLevel = 60
|
||
|
||
# Defines at what level a bot will naturally use its 280% fast flying mount
|
||
# Note: was level 70 during WotLK and TBC
|
||
# Default: 70
|
||
AiPlayerbot.UseFastFlyMountAtMinLevel = 70
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# GEAR
|
||
#
|
||
#
|
||
|
||
# Show helmet and cloak on randombots (reset required)
|
||
AiPlayerbot.RandomBotShowHelmet = 1
|
||
AiPlayerbot.RandomBotShowCloak = 1
|
||
|
||
# Toggles whether altbots will automatically equip items in their inventory that are sufficient upgrades
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoEquipUpgradeLoot = 1
|
||
|
||
# Threshold for auto equipping upgrades
|
||
# Default: 1.1 (Equip when the equipment score of the new item is 1.1 times higher than the currently equipped item)
|
||
AiPlayerbot.EquipUpgradeThreshold = 1.1
|
||
|
||
# Two rounds of equipment initialization to create more suitable gear
|
||
AiPlayerbot.TwoRoundsGearInit = 0
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# LOOTING
|
||
#
|
||
#
|
||
|
||
# Bots keep looting when loot system is set to free for all
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.FreeMethodLoot = 0
|
||
|
||
# Bots' Roll level bots will use for items they Need (0 = pass, 1 = greed, 2 = need)
|
||
# Default: 1 (greed)
|
||
AiPlayerbot.LootNeedRollLevel = 1
|
||
|
||
# Enable bots to roll GREED on items (global toggle)
|
||
# If disabled, bots will PASS instead of GREED on all items
|
||
# Default: 0 (disabled - bots only NEED or PASS)
|
||
AiPlayerbot.LootGreedRollLevel = 0
|
||
|
||
# Enable bots to roll on recipes. Will NEED on learnable profession recipes they don't already know
|
||
# Bots will roll GREED on BoE recipes they can't learn if LootRollGreed is enabled.
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.LootRollRecipe = 0
|
||
|
||
# Bots with enchanting will roll DISENCHANT instead of GREED on disenchantable items
|
||
# If disabled, bots will GREED on disenchantable items instead
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.LootRollDisenchant = 0
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# TIMERS
|
||
#
|
||
#
|
||
|
||
# Max AI iterations per tick
|
||
AiPlayerbot.IterationsPerTick = 10
|
||
|
||
# Delay between two short-time spells cast
|
||
AiPlayerbot.GlobalCooldown = 500
|
||
|
||
# Max wait time when moving
|
||
AiPlayerbot.MaxWaitForMove = 5000
|
||
|
||
# Enable/disable use of MoveSplinePath for bot movement
|
||
# Disabling will result in more erratic movement but is required for stuns, snares, and roots to work on bots
|
||
# Default: 0 - MoveSplinePath enabled
|
||
# 1 - MoveSplinePath disabled in BG/Arena only
|
||
# 2 - MoveSplinePath disabled everywhere
|
||
AiPlayerbot.DisableMoveSplinePath = 0
|
||
|
||
# Max search time for movement (higher for better movement on slopes)
|
||
# Default: 3
|
||
AiPlayerbot.MaxMovementSearchTime = 3
|
||
|
||
# Action expiration time
|
||
AiPlayerbot.ExpireActionTime = 5000
|
||
|
||
# Max dispel auras duration
|
||
AiPlayerbot.DispelAuraDuration = 700
|
||
|
||
# Delay between two bot actions
|
||
AiPlayerbot.ReactDelay = 100
|
||
|
||
# Dynamically adjust react delay for bots in different status to reduce server lags
|
||
AiPlayerbot.DynamicReactDelay = 1
|
||
|
||
# Inactivity delay
|
||
AiPlayerbot.PassiveDelay = 10000
|
||
|
||
# Minimum delay between repeating actions (chat messages, emotes etc)
|
||
AiPlayerbot.RepeatDelay = 2000
|
||
|
||
# Delay timers
|
||
AiPlayerbot.ErrorDelay = 100
|
||
AiPlayerbot.RpgDelay = 10000
|
||
AiPlayerbot.SitDelay = 20000
|
||
# ReturnDelay has a minimum value of 2000 - lower values will cause a crash!
|
||
AiPlayerbot.ReturnDelay = 2000
|
||
AiPlayerbot.LootDelay = 1000
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# DISTANCES
|
||
#
|
||
#
|
||
|
||
# Distances are in yards
|
||
AiPlayerbot.FarDistance = 20.0
|
||
AiPlayerbot.SightDistance = 100.0
|
||
AiPlayerbot.SpellDistance = 28.5
|
||
AiPlayerbot.ShootDistance = 5.0
|
||
AiPlayerbot.HealDistance = 38.5
|
||
AiPlayerbot.LootDistance = 15.0
|
||
AiPlayerbot.FleeDistance = 5.0
|
||
AiPlayerbot.AggroDistance = 22
|
||
AiPlayerbot.TooCloseDistance = 5.0
|
||
AiPlayerbot.MeleeDistance = 0.75
|
||
AiPlayerbot.FollowDistance = 1.5
|
||
AiPlayerbot.WhisperDistance = 6000.0
|
||
AiPlayerbot.ContactDistance = 0.45
|
||
AiPlayerbot.AoeRadius = 10
|
||
AiPlayerbot.RpgDistance = 200
|
||
AiPlayerbot.GrindDistance = 75.0
|
||
AiPlayerbot.ReactDistance = 150.0
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# THRESHOLDS
|
||
#
|
||
#
|
||
|
||
# Health/Mana levels
|
||
AiPlayerbot.CriticalHealth = 25
|
||
AiPlayerbot.LowHealth = 45
|
||
AiPlayerbot.MediumHealth = 65
|
||
AiPlayerbot.AlmostFullHealth = 85
|
||
AiPlayerbot.LowMana = 15
|
||
AiPlayerbot.MediumMana = 40
|
||
AiPlayerbot.HighMana = 65
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# QUESTS
|
||
#
|
||
#
|
||
|
||
# Bots pick their quest rewards
|
||
# yes = picks the most useful item, no = list all rewards, ask = pick useful item and lists if multiple
|
||
AiPlayerbot.AutoPickReward = yes
|
||
|
||
# Sync quests with player (bots will complete quests the moment you hand them in and will not loot quest items.)
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.SyncQuestWithPlayer = 1
|
||
|
||
# Bots will auto-complete quests for the player when handing in bots' quests
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.SyncQuestForPlayer = 0
|
||
|
||
# Bots will drop obsolete quests
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.DropObsoleteQuests = 1
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# COMBAT
|
||
#
|
||
#
|
||
|
||
# Auto add dungeon/raid strategies when entering the instance if implemented
|
||
AiPlayerbot.ApplyInstanceStrategies = 1
|
||
|
||
# Enable auto avoid aoe strategy
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoAvoidAoe = 1
|
||
|
||
# Only avoid aoe spells with a radius smaller than this value
|
||
AiPlayerbot.MaxAoeAvoidRadius = 15.0
|
||
|
||
# A whitelist of aoe spell IDs that should not be avoided
|
||
AiPlayerbot.AoeAvoidSpellWhitelist = 50759,57491,13810,29946
|
||
|
||
# Enable healer bot save mana strategy
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoSaveMana = 1
|
||
|
||
# Healer bot save mana threshold
|
||
# Default: 60 (60%)
|
||
AiPlayerbot.SaveManaThreshold = 60
|
||
|
||
# Bots can flee from enemies
|
||
AiPlayerbot.FleeingEnabled = 1
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# GREATER BUFFS STRATEGIES
|
||
#
|
||
#
|
||
|
||
# Min group size to use Greater buffs (Paladin, Mage, Druid)
|
||
# Default: 3
|
||
AiPlayerbot.MinBotsForGreaterBuff = 3
|
||
|
||
# Cooldown (seconds) between reagent-missing RP warnings, per bot & per buff
|
||
# Default: 30
|
||
AiPlayerbot.RPWarningCooldown = 30
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# CHEATS
|
||
#
|
||
#
|
||
|
||
# Enable/Disable maintenance command
|
||
# Learn all available spells and skills, assign talent points, refresh consumables, repair, enchant equipment, socket gems, etc.
|
||
# Applies if bot's level is above AiPlayerbot.MinEnchantingBotLevel
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.MaintenanceCommand = 1
|
||
|
||
# Enable/Disable specific maintenance command functionality for alt bots
|
||
# Disable to prevent players from giving free bags, spells, skill levels, etc. to their alt bots
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AltMaintenanceAmmo = 1
|
||
AiPlayerbot.AltMaintenanceFood = 1
|
||
AiPlayerbot.AltMaintenanceReagents = 1
|
||
AiPlayerbot.AltMaintenanceConsumables = 1
|
||
AiPlayerbot.AltMaintenancePotions = 1
|
||
|
||
AiPlayerbot.AltMaintenanceBags = 1
|
||
AiPlayerbot.AltMaintenanceMounts = 1
|
||
AiPlayerbot.AltMaintenanceSkills = 1
|
||
|
||
# "Special Spells" consist of any spells listed in AiPlayerbot.RandomBotSpellIds and Death Gate for Death Knights
|
||
AiPlayerbot.AltMaintenanceClassSpells = 1
|
||
AiPlayerbot.AltMaintenanceAvailableSpells = 1
|
||
AiPlayerbot.AltMaintenanceSpecialSpells = 1
|
||
AiPlayerbot.AltMaintenanceTalentTree = 1
|
||
AiPlayerbot.AltMaintenanceGlyphs = 1
|
||
AiPlayerbot.AltMaintenanceGemsEnchants = 1
|
||
|
||
AiPlayerbot.AltMaintenancePet = 1
|
||
AiPlayerbot.AltMaintenancePetTalents = 1
|
||
|
||
AiPlayerbot.AltMaintenanceReputation = 1
|
||
AiPlayerbot.AltMaintenanceAttunementQuests = 1
|
||
AiPlayerbot.AltMaintenanceKeyring = 1
|
||
|
||
# Enable/Disable autogear command, which automatically upgrades bots' gear
|
||
# The quality is limited by AutoGearQualityLimit and AutoGearScoreLimit
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoGearCommand = 1
|
||
|
||
# Enable/Disable autogear command on altbots
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoGearCommandAltBots = 1
|
||
|
||
# If 1 (enabled) chat command: autogear bis, gives bots BiS gear from the playerbots_bis_gear table
|
||
# whose item-level floor matches AutoGearScoreLimit (e.g. 290 = ICC, 245 = ToC,
|
||
# 125 = Kara, 78 = MC). See the AutoGearScoreLimit comment below for the full list.
|
||
# chat command: autogear bis x, (x must be positive integer) will give items based on value of x.
|
||
# If x is bigger than AutoGearScoreLimit, bis wont be given, if lower it will match x when giving items.
|
||
# Commands falls back to autogear when no tier matches or the table is empty for the bot's class/spec.
|
||
# Requires AutoGearQualityLimit = 4 and AutoGearCommand = 1.
|
||
# If AutoGearCommandAltBots = 1 it will be anbled for alt bots.
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.AutoGearBisCommand = 0
|
||
|
||
# Equipment quality limitation for autogear command (1 = normal, 2 = uncommon, 3 = rare, 4 = epic, 5 = legendary)
|
||
# Default: 3 (rare)
|
||
AiPlayerbot.AutoGearQualityLimit = 3
|
||
|
||
# Equipment item level (not gearscore) limitation for autogear command (0 = no limit)
|
||
# Classic
|
||
# Max iLVL Tier 1 = 66 | Tier 2 = 76 | Tier 2.5 = 88 | Tier 3 = 92
|
||
# Max iLVL Phase 1(MC, Ony, ZG) = 78 | Phase 2(BWL) = 83 | Phase 2.5(AQ40) = 88 | Phase 3(Naxx40) = 92
|
||
# TBC
|
||
# Max iLVL Tier 4 = 120 | Tier 5 = 133 | Tier 6 = 164
|
||
# Max iLVL Phase 1(Kara, Gruul, Mag) = 125 | Phase 2(SSC, TK, ZA) = 141 | Phase 3(Hyjal, BT) = 156 | Phase 4(Sunwell) = 164
|
||
# WotLK
|
||
# Max iLVL Tier 7(10/25) = 200/213 | Tier 8(10/25) = 225/232 | Tier 9(10/25) = 232/245 | Tier 10(10/25/HC) = 251/264/290
|
||
# Max iLVL Phase 1(Naxx) = 224 | Phase 2(Ulduar) = 245 | Phase 3(ToC) = 258 | Phase 4(ICC) = 290
|
||
# Default: 0 (no limit)
|
||
AiPlayerbot.AutoGearScoreLimit = 0
|
||
|
||
# Enable/Disable cheats for bots
|
||
# "food" (bots eat or drink without using food or drinks from their inventory)
|
||
# "gold" (bots have infinite gold)
|
||
# "health" (bots immediately regenerate lost health)
|
||
# "mana" (bots have infinite mana)
|
||
# "power" (bots have infinite energy, rage, and runic power)
|
||
# "taxi" (bots may use all flight paths, though they will not actually learn them)
|
||
# "raid" (bots use certain cheats implemented into raid strategies)
|
||
# To use multiple cheats, separate them by commas below (e.g., to enable all, use "gold,health,mana,power,raid,taxi")
|
||
# Default: food, taxi, and raid are enabled
|
||
AiPlayerbot.BotCheats = "food,taxi,raid"
|
||
|
||
# List of attunement quests (comma-separated list of quest IDs) that are automatically completed for all bots.
|
||
# While mod-playerbots does not restore removed attunement requirements, other mods, such as mod-individual-progression, may do so.
|
||
# This is meant to exclude bots from such requirements.
|
||
#
|
||
# Default:
|
||
# Caverns of Time - Part 1
|
||
# - 10279, To The Master's Lair
|
||
# - 10277, The Caverns of Time
|
||
#
|
||
# Caverns of Time - Part 2 (Escape from Durnholde Keep)
|
||
# - 10282, Old Hillsbrad
|
||
# - 10283, Taretha's Diversion
|
||
# - 10284, Escape from Durnholde
|
||
# - 10285, Return to Andormu
|
||
#
|
||
# Caverns of Time - Part 2 (The Black Morass)
|
||
# - 10296, The Black Morass
|
||
# - 10297, The Opening of the Dark Portal
|
||
# - 10298, Hero of the Brood
|
||
#
|
||
# Magister's Terrace Attunement
|
||
# - 11481, Crisis at the Sunwell
|
||
# - 11482, Duty Calls
|
||
# - 11488, Magisters' Terrace
|
||
# - 11490, The Scryer's Scryer
|
||
# - 11492, Hard to Kill
|
||
#
|
||
# Serpentshrine Cavern
|
||
# - 10901, The Cudgel of Kar'desh
|
||
#
|
||
# The Eye
|
||
# - 10888, Trial of the Naaru: Magtheridon
|
||
#
|
||
# Mount Hyjal
|
||
# - 10445, The Vials of Eternity
|
||
#
|
||
# Black Temple
|
||
# - 10985, A Distraction for Akama
|
||
#
|
||
AiPlayerbot.AttunementQuests = 10279,10277,10282,10283,10284,10285,10296,10297,10298,11481,11482,11488,11490,11492,10901,10888,10445,10985
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# FLIGHTPATH
|
||
#
|
||
#
|
||
|
||
# Min random delay before the 1st follower bot clicks the flight-master (ms)
|
||
AiPlayerbot.BotTaxiDelayMinMs = 350
|
||
|
||
# Upper bound for the overall taxi delay window (ms) – larger spreads big raids
|
||
AiPlayerbot.BotTaxiDelayMaxMs = 5000
|
||
|
||
# Fixed gap added per group-slot so bots never take off together (ms)
|
||
AiPlayerbot.BotTaxiGapMs = 200
|
||
|
||
# Extra small randomness added to each gap so launches don’t look robotic (ms)
|
||
AiPlayerbot.BotTaxiGapJitterMs = 100
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# PROFESSIONS
|
||
#
|
||
|
||
# Percentage of randombots in each class bucket that receive a class-matching
|
||
# weighted profession combination. The remaining randombots use the weighted
|
||
# random sane-pair profession pool.
|
||
# Default: 30
|
||
AiPlayerbot.ClassMatchingProfessionChance = 30
|
||
|
||
# Automatically adds the 'master fishing' strategy to bots that have the fishing skill when the bots master fishes.
|
||
# Default: 1 (Enabled)
|
||
AiPlayerbot.EnableFishingWithMaster = 1
|
||
|
||
# Distance from itself (in yards) that a bot with a master will search for water to fish
|
||
AiPlayerbot.FishingDistanceFromMaster = 10.0
|
||
|
||
# Distance from itself (in yards) that a bot without a master will search for water to fish
|
||
# Currently not relevant since masterless bots will not fish
|
||
AiPlayerbot.FishingDistance = 40.0
|
||
|
||
# Distance from water (in yards) beyond which a bot will remove the 'master fishing' strategy
|
||
AiPlayerbot.EndFishingWithMaster = 30.0
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
#######################################
|
||
# #
|
||
# RANDOMBOT-SPECIFIC SETTINGS #
|
||
# #
|
||
#######################################
|
||
|
||
####################################################################################################
|
||
# GENERAL
|
||
#
|
||
#
|
||
|
||
# Enable/Disable randomly generated password for randombot accounts
|
||
AiPlayerbot.RandomBotRandomPassword = 0
|
||
|
||
# Prefix for account names to create for randombots
|
||
AiPlayerbot.RandomBotAccountPrefix = "rndbot"
|
||
|
||
# Minimum and maximum levels for randombots
|
||
AiPlayerbot.RandomBotMinLevel = 1
|
||
AiPlayerbot.RandomBotMaxLevel = 80
|
||
|
||
# Sync max randombot level with max level of online players
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.SyncLevelWithPlayers = 0
|
||
|
||
# Mark many quests ≤ bot level as complete (slows down bot creation)
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.PreQuests = 0
|
||
|
||
# Enable LFG for randombots
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.RandomBotJoinLfg = 1
|
||
|
||
# Enable/Disable periodic online - offline of randombots to mimic the real-world scenario where not all players are online simultaneously
|
||
# When enabled, randombots are randomly selected to go online or offline periodically from a larger set
|
||
# Default: 0 (disabled, the set of online bots remains fixed)
|
||
AiPlayerbot.EnablePeriodicOnlineOffline = 0
|
||
|
||
# Defines the ratio between the total number of randombots (including offline ones) and the number of randombots currently online (MaxRandomBots)
|
||
# This setting must greater than 1.0 and only applies when EnablePeriodicOnlineOffline
|
||
# Default: 2.0 (total number of bots is twice the number of MaxRandomBots)
|
||
AiPlayerbot.PeriodicOnlineOfflineRatio = 2.0
|
||
|
||
# Percentage ratio of Alliance and Horde randombots
|
||
AiPlayerbot.RandomBotAllianceRatio = 50
|
||
AiPlayerbot.RandomBotHordeRatio = 50
|
||
|
||
# Disable logging in of death knight bots
|
||
AiPlayerbot.DisableDeathKnightLogin = 0
|
||
|
||
# Enable simulated expansion limitation for talents and glyphs
|
||
# If enabled, limits talent trees to 5 rows plus the middle talent of the 6th row for bots until level 61
|
||
# and 7 rows plus the middle talent of the 8th row for bots from level 61 until level 71
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.LimitTalentsExpansion = 0
|
||
|
||
# Configure randombot trading (0: Disabled, 1: Enabled, 2: Only Buy, 3: Only Sell)
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.EnableRandomBotTrading = 1
|
||
|
||
# Configure message prefixes which will be excluded in analysis in trade action to open trade window
|
||
AiPlayerbot.TradeActionExcludedPrefixes = "RPLL_H_,DBMv4,{звезда} Questie,{rt1} Questie"
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# LEVELS
|
||
#
|
||
#
|
||
|
||
# Disable randombots being generated with a random level
|
||
# If disabled, every randombot starts on a specified level (but can still level up by killing mobs and questing)
|
||
AiPlayerbot.DisableRandomLevels = 0
|
||
|
||
# Set randombots' starting level here if "AiPlayerbot.DisableRandomLevels" enabled
|
||
AiPlayerbot.RandombotStartingLevel = 1
|
||
|
||
# Chance randombot has min level on first randomize
|
||
# Default: 0.1 (10%)
|
||
AiPlayerbot.RandomBotMinLevelChance = 0.1
|
||
|
||
# Chance randombot has max level on first randomize
|
||
# Default 0.1 (10%)
|
||
AiPlayerbot.RandomBotMaxLevelChance = 0.1
|
||
|
||
# Fix the level of randombots (they won't level up)
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.RandomBotFixedLevel = 0
|
||
|
||
# Set RandomBotMaxLevel bots to RandomBotMinLevel
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.DowngradeMaxLevelBot = 0
|
||
|
||
# Set XP rate for random bots (Default: 1.0)
|
||
# Server XP Rate * AiPlayerbot.RandomBotXPRate
|
||
AiPlayerbot.RandomBotXPRate = 1.0
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# GEAR
|
||
#
|
||
#
|
||
|
||
# Equipment quality limitation for randombots (1 = normal, 2 = uncommon, 3 = rare, 4 = epic, 5 = legendary)
|
||
# This also sets the maximum quality that can be generated by autogear for randombots and altbots
|
||
# Default: 3 (rare)
|
||
AiPlayerbot.RandomGearQualityLimit = 3
|
||
|
||
# Equipment item level (not gearscore) limitation for randombots (0 = no limit)
|
||
# Classic
|
||
# Max iLVL Tier 1 = 66 | Tier 2 = 76 | Tier 2.5 = 88 | Tier 3 = 92
|
||
# Max iLVL Phase 1(MC, Ony, ZG) = 78 | Phase 2(BWL) = 83 | Phase 2.5(AQ40) = 88 | Phase 3(Naxx40) = 92
|
||
# TBC
|
||
# Max iLVL Tier 4 = 120 | Tier 5 = 133 | Tier 6 = 164
|
||
# Max iLVL Phase 1(Kara, Gruul, Mag) = 125 | Phase 2(SSC, TK, ZA) = 141 | Phase 3(Hyjal, BT) = 156 | Phase 4(Sunwell) = 164
|
||
# WotLK
|
||
# Max iLVL Tier 7(10/25) = 200/213 | Tier 8(10/25) = 225/232 | Tier 9(10/25) = 232/245 | Tier 10(10/25/HC) = 251/264/290
|
||
# Max iLVL Phase 1(Naxx) = 224 | Phase 2(Ulduar) = 245 | Phase 3(ToC) = 258 | Phase 4(ICC) = 290
|
||
# Default: 0 (no limit)
|
||
AiPlayerbot.RandomGearScoreLimit = 0
|
||
|
||
# Prefer armor of the class's ideal type: apply 3x score multiplier to class-appropriate armor.
|
||
# When enabled, Warriors strongly prefer plate, Shamans prefer mail, etc.
|
||
# A truly superior item can still win (no hard filtering), but same-quality
|
||
# armor of the preferred type will score 3x higher and be equipped instead.
|
||
#
|
||
# ARMOR TYPE PREFERENCES:
|
||
# Plate: Warriors, Paladins, Death Knights
|
||
# Mail: Hunters, Shamans
|
||
# Leather: Rogues, Druids
|
||
# Cloth: Priests, Mages, Warlocks
|
||
#
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.PreferClassArmorType = 0
|
||
|
||
|
||
# When enabled, bots prefer spec-appropriate weapons based on speed and weapon type during autogear.
|
||
# Examples: Arms Warriors favor slow 2H axes/polearms (Axe Specialization), Combat Rogues
|
||
# favor a slow MH with a fast OH, and Enhancement Shamans favor synchronized slow 1H weapons.
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.PreferredSpecWeapons = 0
|
||
|
||
# If disabled, random bots can only upgrade equipment through looting and quests
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.IncrementalGearInit = 1
|
||
|
||
# Set minimum level of bots that will enchant and socket gems into their equipment with maintenance
|
||
# If greater than RandomBotMaxlevel, bots will not automatically enchant equipment or socket gems
|
||
# Default: 60
|
||
AiPlayerbot.MinEnchantingBotLevel = 60
|
||
|
||
# Enable expansion limitation for bot enchants and gems
|
||
# If enabled, bots will not use TBC enchants until level 61 or WotLK enchants and gems until level 71
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.LimitEnchantExpansion = 1
|
||
|
||
# Enable expansion limitation for gear
|
||
# If enabled, bots will not equip TBC gear until level 61 or WotLK gear until level 71
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.LimitGearExpansion = 1
|
||
|
||
# Chance randombot will have less-than-optimized generated gear
|
||
# Set between 0 (0%) and 1 (100%)
|
||
AiPlayerbot.RandomGearLoweringChance = 0
|
||
|
||
# Unobtainable or unusable items (comma-separated list of item IDs)
|
||
# Default: Chilton Wand (12468), Totem of the Earthen Ring (46978)
|
||
AiPlayerbot.UnobtainableItems = 12468,46978
|
||
|
||
# Randombots check player's gearscore level and deny the group invitation if it's too low
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.GearScoreCheck = 0
|
||
|
||
# Enable/Disable bot equipment persistence (stop random initialization) after certain level (EquipmentPersistenceLevel)
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.EquipmentPersistence = 0
|
||
|
||
# Default level if enabled: 80
|
||
AiPlayerbot.EquipmentPersistenceLevel = 80
|
||
|
||
# Randombots automatically upgrade their equipment on levelup
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoUpgradeEquip = 1
|
||
|
||
# Only set wolf pets for hunters for optimal raid performance (0 = disabled, 1 = enabled only for max-level bots, 2 = enabled)
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.HunterWolfPet = 0
|
||
|
||
# Default pet stance when a bot summons a pet
|
||
# 0 = Passive, 1 = Defensive, 2 = Aggressive
|
||
# Default: 1 (Defensive)
|
||
AiPlayerbot.DefaultPetStance = 1
|
||
|
||
# Enable/disable debug messages about pet commands
|
||
# 0 = Disabled, 1 = Enabled
|
||
# Default = 0 (disabled)
|
||
AiPlayerbot.PetChatCommandDebug = 0
|
||
|
||
# Prohibit hunter bots from creating pets with any family ID listed below in ExcludedHunterPetFamilies
|
||
# See the creature_family database table for all pet families by ID (note: ID for spiders is 3)
|
||
AiPlayerbot.ExcludedHunterPetFamilies = ""
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
####################################################################################################
|
||
# ACTIVITY
|
||
#
|
||
# BotActiveAlone
|
||
# - Controls how many bots are active when no real players are nearby.
|
||
# - Think of it as a rough percentage: 10 means approximately 10% of bots will be active.
|
||
# Not exact — the actual number may vary slightly per rotation cycle.
|
||
# - The active bots rotate: every <DurationSeconds> a different set of bots takes a turn.
|
||
# - The real number of active bots will always be higher than this value, because bots in
|
||
# combat, dungeons, battlegrounds, LFG queue, groups with real players, etc. are always
|
||
# forced active on top of this (see force rules below).
|
||
# - Set to 100 (with SmartScale off) = all bots always active. Maximum server load.
|
||
# - Set to 0 = only bots that match a force rule below will be active.
|
||
#
|
||
# BotActiveAloneDurationSeconds
|
||
# - How often the active roster rotates (in seconds). A different group of bots wakes up
|
||
# and the previous group may go idle.
|
||
# - This is a minimum, not exact. If a bot is in combat or meets any force rule when the
|
||
# rotation happens, it stays active until those conditions end — it won't be cut off
|
||
# mid-fight just because its turn expired.
|
||
#
|
||
AiPlayerbot.BotActiveAlone = 10
|
||
AiPlayerbot.BotActiveAloneDurationSeconds = 30
|
||
|
||
#
|
||
# Force-active rules (1 = on, 0 = off)
|
||
# These override the percentage above. If any of these conditions is true, the bot stays active.
|
||
#
|
||
# InRadius - A real player is within this many yards (set to 0 to disable).
|
||
# InZone - A real player is in the same zone (e.g. Elwynn Forest).
|
||
# InMap - A real player is on the same continent (e.g. Eastern Kingdoms).
|
||
# IsFriend - A real player has this bot on their friends list.
|
||
# InGuild - This bot is in a guild that has a real player in it.
|
||
#
|
||
# Bots are also always forced active (not configurable) when:
|
||
# in combat, inside a dungeon/raid/BG, in a BG or LFG queue,
|
||
# grouped with a real player, or controlled by a real player.
|
||
#
|
||
AiPlayerbot.BotActiveAloneForceWhenInRadius = 150
|
||
AiPlayerbot.BotActiveAloneForceWhenInZone = 1
|
||
AiPlayerbot.BotActiveAloneForceWhenInMap = 0
|
||
AiPlayerbot.BotActiveAloneForceWhenIsFriend = 0
|
||
AiPlayerbot.BotActiveAloneForceWhenInGuild = 1
|
||
|
||
# SmartScale — automatically reduces active bots when the server is struggling.
|
||
# Monitors the server's update time (how long each server tick takes in milliseconds).
|
||
# When the server slows down, fewer bots are kept active to reduce load.
|
||
#
|
||
# Floor (default 50ms) - Below this, no reduction. Server is running fine.
|
||
# Ceiling (default 200ms) - At or above this, all non-forced bots are paused.
|
||
# Between floor and ceiling, activity scales down gradually.
|
||
# Example: BotActiveAlone=10, floor=50, ceiling=200
|
||
# Server at 50ms → ~10% active (no reduction)
|
||
# Server at 125ms → ~5% active (half reduction)
|
||
# Server at 200ms → 0% active (only forced bots remain)
|
||
#
|
||
# MinLevel/MaxLevel — only bots within this level range are affected by SmartScale.
|
||
# Bots outside the range always use the full BotActiveAlone value.
|
||
# Force rules always win over SmartScale.
|
||
#
|
||
AiPlayerbot.botActiveAloneSmartScale = 1
|
||
AiPlayerbot.botActiveAloneSmartScaleDiffLimitfloor = 50
|
||
AiPlayerbot.botActiveAloneSmartScaleDiffLimitCeiling = 200
|
||
AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1
|
||
AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# QUESTS
|
||
#
|
||
#
|
||
|
||
# Quest that will be completed and rewarded for all randombots
|
||
AiPlayerbot.RandomBotQuestIds = "3802,5505,6502,7761,7848,10277,10285,11492,13188,13189,24499,24511,24710,24712"
|
||
|
||
# Randombots will group with nearby randombots to do shared quests
|
||
AiPlayerbot.RandomBotGroupNearby = 0
|
||
|
||
# Randombots will pick quests on their own and try to complete them
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoDoQuests = 1
|
||
|
||
# Quest items to keep in bots' inventories (do not destroy)
|
||
AiPlayerbot.RandomBotQuestItems = "5175,5176,5177,5178,6948,11000,12382,13704,16309"
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# SPELLS
|
||
#
|
||
#
|
||
|
||
# Randombots automatically learn class quest reward spells on levelup
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.AutoLearnQuestSpells = 0
|
||
|
||
# Randombots automatically learn trainable spells on levelup
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoLearnTrainerSpells = 1
|
||
|
||
# Randombots automatically spend talent points on levelup
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoPickTalents = 1
|
||
|
||
# Spells every randombot will learn automatically and every altbot will learn with maintenance (54197 - cold weather flying)
|
||
AiPlayerbot.RandomBotSpellIds = "54197"
|
||
|
||
# ID of spell to open lootable chests
|
||
AiPlayerbot.OpenGoSpell = 6477
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# STRATEGIES
|
||
#
|
||
#
|
||
|
||
# Additional randombot strategies
|
||
# Strategies added here are applied to all randombots, in addition (or subtraction) to spec/role-based default strategies.
|
||
# These rules are processed after the defaults.
|
||
# Example: "+threat,-potions"
|
||
AiPlayerbot.RandomBotCombatStrategies = ""
|
||
AiPlayerbot.RandomBotNonCombatStrategies = ""
|
||
|
||
# Additional altbot strategies
|
||
# Strategies added here are applied to all altbots, in addition (or subtraction) to spec/role-based default strategies.
|
||
# These rules are processed after the defaults.
|
||
AiPlayerbot.CombatStrategies = ""
|
||
AiPlayerbot.NonCombatStrategies = ""
|
||
|
||
# Remove "healer dps" strategy on the maps specified below.
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.HealerDPSMapRestriction = 1
|
||
|
||
# List of Map IDs where "healer dps" strategy will be removed if AiPlayerbot.HealerDPSMapRestriction is enabled
|
||
# Default: (Dungeon and Raid maps) "33,34,36,43,47,48,70,90,109,129,209,229,230,329,349,389,429,1001,1004,1007,269,540,542,543,545,546,547,552,553,554,555,556,557,558,560,585,574,575,576,578,595,599,600,601,602,604,608,619,632,650,658,668,409,469,509,531,532,534,544,548,550,564,565,580,249,533,603,615,616,624,631,649,724"
|
||
AiPlayerbot.RestrictedHealerDPSMaps = "33,34,36,43,47,48,70,90,109,129,209,229,230,329,349,389,429,1001,1004,1007,269,540,542,543,545,546,547,552,553,554,555,556,557,558,560,585,574,575,576,578,595,599,600,601,602,604,608,619,632,650,658,668,409,469,509,531,532,534,544,548,550,564,565,580,249,533,603,615,616,624,631,649,724"
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# RPG STRATEGY
|
||
#
|
||
#
|
||
|
||
# Randombots will behave more like real players (experimental)
|
||
# This option will override AiPlayerbot.AutoDoQuests, RandomBotTeleLowerLevel, and RandomBotTeleHigherLevel
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.EnableNewRpgStrategy = 1
|
||
|
||
# Control probability weights for RPG status of bots. Takes effect only when the status meets its premise.
|
||
# Sum of weights need not be 100. Set to 0 to disable the status.
|
||
#
|
||
# WanderRandom (Default: 15 Move randomly nearby to find and kill mobs)
|
||
# WanderNpc (Default: 20 Randomly interact with nearby NPCs)
|
||
# GoGrind (Default: 15 Go to nearby level-appropriate locations to grind for killing mobs)
|
||
# GoCamp (Default: 10 Return to a nearby camp depending on innkeeper/flightmaster)
|
||
# DoQuest (Default: 60 Select quest from the quest log and head to the location to attempt completion)
|
||
# TravelFlight (Default: 15 Go to the nearest flightmaster and fly to a level-appropriate area)
|
||
# Rest (Default: 5 Take a break for a while and do nothing)
|
||
# OutdoorPvp (Default: 10 Participate in outdoor PvP capture points if already in an outdoor PvP zone)
|
||
AiPlayerbot.RpgStatusProbWeight.WanderRandom = 15
|
||
AiPlayerbot.RpgStatusProbWeight.WanderNpc = 20
|
||
AiPlayerbot.RpgStatusProbWeight.GoGrind = 15
|
||
AiPlayerbot.RpgStatusProbWeight.GoCamp = 10
|
||
AiPlayerbot.RpgStatusProbWeight.DoQuest = 60
|
||
AiPlayerbot.RpgStatusProbWeight.TravelFlight = 15
|
||
AiPlayerbot.RpgStatusProbWeight.Rest = 5
|
||
AiPlayerbot.RpgStatusProbWeight.OutdoorPvp = 10
|
||
|
||
# Bots' minimum and maximum level when teleporting in and out of a zone, according to the new RPG strategy
|
||
# Format: AiPlayerbot.ZoneBracket.zoneID = minLevel,maxLevel
|
||
#
|
||
# Classic WoW - Low-level zones:
|
||
# Dun Morogh (Zone ID: 1 Default Min,Max: 5,12)
|
||
# Elwynn Forest (Zone ID: 12 Default Min,Max: 5,12)
|
||
# Durotar (Zone ID: 14 Default Min,Max: 5,12)
|
||
# Tirisfal Glades (Zone ID: 85 Default Min,Max: 5,12)
|
||
# Teldrassil (Zone ID: 141 Default Min,Max: 5,12)
|
||
# Mulgore (Zone ID: 215 Default Min,Max: 5,12)
|
||
# Eversong Woods (Zone ID: 3430 Default Min,Max: 5,12)
|
||
# Azuremyst Isle (Zone ID: 3524 Default Min,Max: 5,12)
|
||
AiPlayerbot.ZoneBracket.1 = 5,12
|
||
AiPlayerbot.ZoneBracket.12 = 5,12
|
||
AiPlayerbot.ZoneBracket.14 = 5,12
|
||
AiPlayerbot.ZoneBracket.85 = 5,12
|
||
AiPlayerbot.ZoneBracket.141 = 5,12
|
||
AiPlayerbot.ZoneBracket.215 = 5,12
|
||
AiPlayerbot.ZoneBracket.3430 = 5,12
|
||
AiPlayerbot.ZoneBracket.3524 = 5,12
|
||
|
||
# Classic WoW - Mid-level zones:
|
||
# Barrens (Zone ID: 17 Default Min,Max: 10,25)
|
||
# Loch Modan (Zone ID: 38 Default Min,Max: 10,20)
|
||
# Westfall (Zone ID: 40 Default Min,Max: 10,21)
|
||
# Silverpine Forest (Zone ID: 130 Default Min,Max: 10,23)
|
||
# Darkshore (Zone ID: 148 Default Min,Max: 10,21)
|
||
# Ghostlands (Zone ID: 3433 Default Min,Max: 10,22)
|
||
# Bloodmyst Isle (Zone ID: 3525 Default Min,Max: 10,21)
|
||
AiPlayerbot.ZoneBracket.17 = 10,25
|
||
AiPlayerbot.ZoneBracket.38 = 10,20
|
||
AiPlayerbot.ZoneBracket.40 = 10,21
|
||
AiPlayerbot.ZoneBracket.130 = 10,23
|
||
AiPlayerbot.ZoneBracket.148 = 10,21
|
||
AiPlayerbot.ZoneBracket.3433 = 10,22
|
||
AiPlayerbot.ZoneBracket.3525 = 10,21
|
||
|
||
# Classic WoW - High-level zones:
|
||
# Duskwood (Zone ID: 10 Default Min,Max: 19,33)
|
||
# Wetlands (Zone ID: 11 Default Min,Max: 21,30)
|
||
# Redridge Mountains (Zone ID: 44 Default Min,Max: 16,28)
|
||
# Hillsbrad Foothills (Zone ID: 267 Default Min,Max: 20,34)
|
||
# Ashenvale (Zone ID: 331 Default Min,Max: 18,33)
|
||
# Thousand Needles (Zone ID: 400 Default Min,Max: 24,36)
|
||
# Stonetalon Mountains (Zone ID: 406 Default Min,Max: 16,29)
|
||
AiPlayerbot.ZoneBracket.10 = 19,33
|
||
AiPlayerbot.ZoneBracket.11 = 21,30
|
||
AiPlayerbot.ZoneBracket.44 = 16,28
|
||
AiPlayerbot.ZoneBracket.267 = 20,34
|
||
AiPlayerbot.ZoneBracket.331 = 18,33
|
||
AiPlayerbot.ZoneBracket.400 = 24,36
|
||
AiPlayerbot.ZoneBracket.406 = 16,29
|
||
|
||
# Classic WoW - Higher-level zones:
|
||
# Badlands (Zone ID: 3 Default Min,Max: 36,46)
|
||
# Swamp of Sorrows (Zone ID: 8 Default Min,Max: 36,46)
|
||
# Dustwallow Marsh (Zone ID: 15 Default Min,Max: 35,46)
|
||
# Azshara (Zone ID: 16 Default Min,Max: 45,52)
|
||
# Stranglethorn Vale (Zone ID: 33 Default Min,Max: 32,47)
|
||
# Arathi Highlands (Zone ID: 45 Default Min,Max: 30,42)
|
||
# Hinterlands (Zone ID: 47 Default Min,Max: 42,51)
|
||
# Searing Gorge (Zone ID: 51 Default Min,Max: 45,51)
|
||
# Feralas (Zone ID: 357 Default Min,Max: 40,52)
|
||
# Desolace (Zone ID: 405 Default Min,Max: 30,41)
|
||
# Tanaris (Zone ID: 440 Default Min,Max: 41,52)
|
||
AiPlayerbot.ZoneBracket.3 = 36,46
|
||
AiPlayerbot.ZoneBracket.8 = 36,46
|
||
AiPlayerbot.ZoneBracket.15 = 35,46
|
||
AiPlayerbot.ZoneBracket.16 = 45,52
|
||
AiPlayerbot.ZoneBracket.33 = 32,47
|
||
AiPlayerbot.ZoneBracket.45 = 30,42
|
||
AiPlayerbot.ZoneBracket.47 = 42,51
|
||
AiPlayerbot.ZoneBracket.51 = 45,51
|
||
AiPlayerbot.ZoneBracket.357 = 40,52
|
||
AiPlayerbot.ZoneBracket.405 = 30,41
|
||
AiPlayerbot.ZoneBracket.440 = 41,52
|
||
|
||
# Classic WoW - Top-level zones:
|
||
# Blasted Lands (Zone ID: 4 Default Min,Max: 52,57)
|
||
# Western Plaguelands (Zone ID: 28 Default Min,Max: 50,60)
|
||
# Burning Steppes (Zone ID: 46 Default Min,Max: 51,60)
|
||
# Eastern Plaguelands (Zone ID: 139 Default Min,Max: 54,62)
|
||
# Felwood (Zone ID: 361 Default Min,Max: 47,57)
|
||
# Un'Goro Crater (Zone ID: 490 Default Min,Max: 49,56)
|
||
# Winterspring (Zone ID: 618 Default Min,Max: 54,61)
|
||
# Silithus (Zone ID: 1377 Default Min,Max: 54,63)
|
||
AiPlayerbot.ZoneBracket.4 = 52,57
|
||
AiPlayerbot.ZoneBracket.28 = 50,60
|
||
AiPlayerbot.ZoneBracket.46 = 51,60
|
||
AiPlayerbot.ZoneBracket.139 = 54,62
|
||
AiPlayerbot.ZoneBracket.361 = 47,57
|
||
AiPlayerbot.ZoneBracket.490 = 49,56
|
||
AiPlayerbot.ZoneBracket.618 = 54,61
|
||
AiPlayerbot.ZoneBracket.1377 = 54,63
|
||
|
||
# The Burning Crusade - Zones:
|
||
# Hellfire Peninsula (Zone ID: 3483 Default Min,Max: 58,66)
|
||
# Nagrand (Zone ID: 3518 Default Min,Max: 64,70)
|
||
# Terokkar Forest (Zone ID: 3519 Default Min,Max: 62,73)
|
||
# Shadowmoon Valley (Zone ID: 3520 Default Min,Max: 66,73)
|
||
# Zangarmarsh (Zone ID: 3521 Default Min,Max: 60,67)
|
||
# Blade's Edge Mountains (Zone ID: 3522 Default Min,Max: 64,73)
|
||
# Netherstorm (Zone ID: 3523 Default Min,Max: 67,73)
|
||
# Isle of Quel'Danas (Zone ID: 4080 Default Min,Max: 68,73)
|
||
AiPlayerbot.ZoneBracket.3483 = 58,66
|
||
AiPlayerbot.ZoneBracket.3518 = 64,70
|
||
AiPlayerbot.ZoneBracket.3519 = 62,73
|
||
AiPlayerbot.ZoneBracket.3520 = 66,73
|
||
AiPlayerbot.ZoneBracket.3521 = 60,67
|
||
AiPlayerbot.ZoneBracket.3522 = 64,73
|
||
AiPlayerbot.ZoneBracket.3523 = 67,73
|
||
AiPlayerbot.ZoneBracket.4080 = 68,73
|
||
|
||
# Wrath of the Lich King - Zones:
|
||
# Dragonblight (Zone ID: 65 Default Min,Max: 71,77)
|
||
# Zul'Drak (Zone ID: 66 Default Min,Max: 74,80)
|
||
# Storm Peaks (Zone ID: 67 Default Min,Max: 77,80)
|
||
# Icecrown Glacier (Zone ID: 210 Default Min,Max: 77,80)
|
||
# Grizzly Hills (Zone ID: 394 Default Min,Max: 72,78)
|
||
# Howling Fjord (Zone ID: 495 Default Min,Max: 68,74)
|
||
# Crystalsong Forest (Zone ID: 2817 Default Min,Max: 77,80)
|
||
# Borean Tundra (Zone ID: 3537 Default Min,Max: 68,75)
|
||
# Sholazar Basin (Zone ID: 3711 Default Min,Max: 75,80)
|
||
# Wintergrasp (Zone ID: 4197 Default Min,Max: 79,80)
|
||
AiPlayerbot.ZoneBracket.65 = 71,77
|
||
AiPlayerbot.ZoneBracket.66 = 74,80
|
||
AiPlayerbot.ZoneBracket.67 = 77,80
|
||
AiPlayerbot.ZoneBracket.210 = 77,80
|
||
AiPlayerbot.ZoneBracket.394 = 72,78
|
||
AiPlayerbot.ZoneBracket.495 = 68,74
|
||
AiPlayerbot.ZoneBracket.2817 = 77,80
|
||
AiPlayerbot.ZoneBracket.3537 = 68,75
|
||
AiPlayerbot.ZoneBracket.3711 = 75,80
|
||
AiPlayerbot.ZoneBracket.4197 = 79,80
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# TELEPORTS
|
||
#
|
||
#
|
||
|
||
# Map IDs where bots can be teleported to
|
||
# Defaults: 0 = Eastern Kingdoms, 1 = Kalimdor, 530 = Outland, 571 = Northrend
|
||
AiPlayerbot.RandomBotMaps = 0,1,530,571
|
||
|
||
# Probabilty bots teleport to banker (city)
|
||
# Default: 0.25
|
||
AiPlayerbot.ProbTeleToBankers = 0.25
|
||
|
||
# Control probability weights for bots teleporting to Capital city bankers
|
||
# Sum of weights need not be 100. Set to 0 to disable teleporting to the city.
|
||
AiPlayerbot.EnableWeightTeleToCityBankers = 1
|
||
AiPlayerbot.TeleToStormwindWeight = 2
|
||
AiPlayerbot.TeleToIronforgeWeight = 1
|
||
AiPlayerbot.TeleToDarnassusWeight = 1
|
||
AiPlayerbot.TeleToExodarWeight = 1
|
||
AiPlayerbot.TeleToOrgrimmarWeight = 2
|
||
AiPlayerbot.TeleToUndercityWeight = 1
|
||
AiPlayerbot.TeleToThunderBluffWeight = 1
|
||
AiPlayerbot.TeleToSilvermoonCityWeight = 1
|
||
AiPlayerbot.TeleToShattrathCityWeight = 1
|
||
AiPlayerbot.TeleToDalaranWeight = 1
|
||
|
||
# How far randombots are teleported after death
|
||
AiPlayerbot.RandomBotTeleportDistance = 100
|
||
|
||
# How many levels below the lowest-level creature in a zone, can a bot be
|
||
# This will have no effect if AiPlayerbot.EnableNewRpgStrategy is enabled
|
||
# Default: 1 (randombot will leave if they are more than 1 level lower)
|
||
AiPlayerbot.RandomBotTeleLowerLevel = 1
|
||
|
||
# How many levels above the highest-level creature in a zone, can a bot be
|
||
# This will have no effect if AiPlayerbot.EnableNewRpgStrategy is enabled
|
||
# Default: 3 (randombot will leave if they are more than 3 levels higher)
|
||
AiPlayerbot.RandomBotTeleHigherLevel = 3
|
||
|
||
# Bots automatically teleport to another place for leveling on levelup
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.AutoTeleportForLevel = 1
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# BATTLEGROUNDS & ARENAS & PVP
|
||
#
|
||
#
|
||
|
||
# Enable battlegrounds/arenas for randombots
|
||
AiPlayerbot.RandomBotJoinBG = 1
|
||
|
||
# Enable auto-joining of battlegrounds - have bots start battlegrounds and arenas on their own
|
||
AiPlayerbot.RandomBotAutoJoinBG = 0
|
||
|
||
# Required Configuration for RandomBotAutoJoinBG
|
||
#
|
||
# Known issue: When enabling many brackats in combination with multiple instances, it can lead to more instances created by bots than intended (over-queuing).
|
||
#
|
||
# This section controls the level brackets and automatic bot participation in battlegrounds and arenas.
|
||
#
|
||
# Brackets:
|
||
# - Specify the level ranges for bots to auto-join:
|
||
# - Warsong Gulch (WS): 0 = 10-19, 1 = 20-29, 2 = 30-39, ..., 7 = 80 (Default: 7)
|
||
# - Rated Arena: 0 = 10-14, 1 = 15-19, ..., 14 = 80-84 (Default: 14)
|
||
# - Multiple brackets can be specified as a comma-separated list (e.g., "0,2,5").
|
||
#
|
||
# Counts:
|
||
# - Specify the number of battlegrounds to auto-fill per bracket.
|
||
# - For battlegrounds, 'Count" is the number of bots per bracket. For example:
|
||
# - Warsong Gulch Count = 1 adds 20 bots (10 per team).
|
||
# - Ensure there are enough eligible bots to meet the specified counts.
|
||
#
|
||
# Arena Considerations:
|
||
# - Rated arena brackets default to level 80-84 (bracket 14).
|
||
# - Custom code changes are required for lower-level arena brackets to function properly.
|
||
#
|
||
# Battleground bracket range possibilities:
|
||
# AiPlayerbot.RandomBotAutoJoinICBrackets = 0,1
|
||
# AiPlayerbot.RandomBotAutoJoinEYBrackets = 0,1,2
|
||
# AiPlayerbot.RandomBotAutoJoinAVBrackets = 0,1,2,3
|
||
# AiPlayerbot.RandomBotAutoJoinABBrackets = 0,1,2,3,4,5,6
|
||
# AiPlayerbot.RandomBotAutoJoinWSBrackets = 0,1,2,3,4,5,6,7
|
||
|
||
AiPlayerbot.RandomBotAutoJoinICBrackets = 1
|
||
AiPlayerbot.RandomBotAutoJoinEYBrackets = 2
|
||
AiPlayerbot.RandomBotAutoJoinAVBrackets = 3
|
||
AiPlayerbot.RandomBotAutoJoinABBrackets = 6
|
||
AiPlayerbot.RandomBotAutoJoinWSBrackets = 7
|
||
|
||
# Battlegrounds count (per bracket!):
|
||
AiPlayerbot.RandomBotAutoJoinBGICCount = 0
|
||
AiPlayerbot.RandomBotAutoJoinBGEYCount = 1
|
||
AiPlayerbot.RandomBotAutoJoinBGAVCount = 0
|
||
AiPlayerbot.RandomBotAutoJoinBGABCount = 1
|
||
AiPlayerbot.RandomBotAutoJoinBGWSCount = 1
|
||
|
||
# Arena configuration:
|
||
AiPlayerbot.RandomBotAutoJoinArenaBracket = 14
|
||
|
||
AiPlayerbot.RandomBotAutoJoinBGRatedArena2v2Count = 0
|
||
AiPlayerbot.RandomBotAutoJoinBGRatedArena3v3Count = 0
|
||
AiPlayerbot.RandomBotAutoJoinBGRatedArena5v5Count = 0
|
||
|
||
# Randombot arena team count
|
||
# Teams are created when bots are initialized on server restart.
|
||
# You may need to first delete all arena teams, then reinitialize bots.
|
||
# Warning: Reinitializing bots completely resets them (command in game: .playerbots rndbot init)
|
||
# Bots only join one arena team to avoid queueing issues. Take that into account when increasing count.
|
||
# Default: 2v2: 10 (20 Bots), 3v3: 10 (30 bots), 5v5: 5 (25 bots)
|
||
AiPlayerbot.RandomBotArenaTeam2v2Count = 10
|
||
AiPlayerbot.RandomBotArenaTeam3v3Count = 10
|
||
AiPlayerbot.RandomBotArenaTeam5v5Count = 5
|
||
|
||
# Arena rating is randomized on team creation.
|
||
# Default: Max: 2000, Min: 1000
|
||
AiPlayerbot.RandomBotArenaTeamMaxRating = 2000
|
||
AiPlayerbot.RandomBotArenaTeamMinRating = 1000
|
||
|
||
# Delete all randombot arena teams
|
||
AiPlayerbot.DeleteRandomBotArenaTeams = 0
|
||
|
||
# PvP Restricted Zones (bots don't pvp)
|
||
AiPlayerbot.PvpProhibitedZoneIds = "2255,656,2361,2362,2363,976,35,2268,3425,392,541,1446,3828,3712,3738,3565,3539,3623,4152,3988,4658,4284,4418,4436,4275,4323,4395,3703,4298,3951"
|
||
|
||
# PvP Restricted Areas (bots don't pvp)
|
||
AiPlayerbot.PvpProhibitedAreaIds = "976,35,392,2268,4161,4010,4317,4312,3649,3887,3958,3724,4080,3938,3754,3786,3973,4085,4086,4087,4088"
|
||
|
||
# Improve reaction speeds in battlegrounds and arenas (may cause lag)
|
||
AiPlayerbot.FastReactInBG = 1
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# RANDOM BOT TIMING AND BEHAVIOR
|
||
#
|
||
#
|
||
|
||
# How often (in seconds) the random bot manager runs its main update loop
|
||
# Default: 20
|
||
AiPlayerbot.RandomBotUpdateInterval = 20
|
||
|
||
# Minimum and maximum seconds before the manager re-evaluates and adjusts total random bot count
|
||
# Defaults: 1800 (min), 7200 (max)
|
||
AiPlayerbot.RandomBotCountChangeMinInterval = 1800
|
||
AiPlayerbot.RandomBotCountChangeMaxInterval = 7200
|
||
|
||
# Minimum and maximum seconds a random bot will stay online before logging out
|
||
# Defaults: 600 (min), 28800 (max)
|
||
AiPlayerbot.MinRandomBotInWorldTime = 600
|
||
AiPlayerbot.MaxRandomBotInWorldTime = 28800
|
||
|
||
# Minimum and maximum seconds before a bot is eligible for re-randomization (gear, class, talents, etc.)
|
||
# Defaults: 7200 (min), 1209600 (max)
|
||
AiPlayerbot.MinRandomBotRandomizeTime = 7200
|
||
AiPlayerbot.MaxRandomBotRandomizeTime = 1209600
|
||
|
||
# Number of bots processed (login, logout, update) per manager update cycle
|
||
# Default: 60
|
||
AiPlayerbot.RandomBotsPerInterval = 60
|
||
|
||
# Minimum and maximum seconds after death before a bot revives
|
||
# Defaults: 60 (min), 300 (max)
|
||
AiPlayerbot.MinRandomBotReviveTime = 60
|
||
AiPlayerbot.MaxRandomBotReviveTime = 300
|
||
|
||
# Minimum and maximum seconds between bot teleports to new areas or zones
|
||
# Defaults: 3600 (min), 18000 (max)
|
||
AiPlayerbot.MinRandomBotTeleportInterval = 3600
|
||
AiPlayerbot.MaxRandomBotTeleportInterval = 18000
|
||
|
||
# Number of seconds bots flagged as permanent stay in the world (31,104,000 ≈ 1 year)
|
||
# Default: 31104000
|
||
AiPlayerbot.PermanentlyInWorldTime = 31104000
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
###################################
|
||
# #
|
||
# PREMADE SPECS #
|
||
# #
|
||
###################################
|
||
|
||
####################################################################################################
|
||
# INFORMATION
|
||
#
|
||
#
|
||
|
||
# AiPlayerbot.PremadeSpecName.<class>.<specno> = <name> #Name of the talent specialisation
|
||
# AiPlayerbot.PremadeSpecLink.<class>.<specno>.<level> = <link> #Wowhead style link the bot should work towards at given level.
|
||
# AiPlayerbot.PremadeSpecGlyph.<class>.<specno> = <major 1>,<minor 1>,<major 2>,<minor 2>,<minor 3>,<major 3> #ItemId of the glyphs
|
||
# e.g., formulate the link on https://www.wowhead.com/wotlk/talent-calc/warrior/3022032123335100202012013031251-32505010002
|
||
# 0 <= specno < 20, 1 <= level <= 80
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# WARRIOR
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.1.0 = arms pve
|
||
AiPlayerbot.PremadeSpecGlyph.1.0 = 43418,43395,43423,43399,43397,43421
|
||
AiPlayerbot.PremadeSpecLink.1.0.60 = 3022032023335100002012211231241
|
||
AiPlayerbot.PremadeSpecLink.1.0.80 = 3022032023335100102012213231251-305-2033
|
||
AiPlayerbot.PremadeSpecName.1.1 = fury pve
|
||
AiPlayerbot.PremadeSpecGlyph.1.1 = 43418,43395,43414,43396,49084,43432
|
||
AiPlayerbot.PremadeSpecLink.1.1.60 = -305053000500310053120501351
|
||
AiPlayerbot.PremadeSpecLink.1.1.80 = 32002300233-305053000500310153120511351
|
||
AiPlayerbot.PremadeSpecName.1.2 = prot pve
|
||
AiPlayerbot.PremadeSpecGlyph.1.2 = 43429,43397,43425,43399,49084,45797
|
||
AiPlayerbot.PremadeSpecLink.1.2.60 = --053351225000210521030113321
|
||
AiPlayerbot.PremadeSpecLink.1.2.80 = 3500030023-301-053351225000210521030113321
|
||
AiPlayerbot.PremadeSpecName.1.3 = arms pvp
|
||
AiPlayerbot.PremadeSpecGlyph.1.3 = 43417,43397,43423,43396,49084,43421
|
||
AiPlayerbot.PremadeSpecLink.1.3.60 = 0320232023331100032212012221251
|
||
AiPlayerbot.PremadeSpecLink.1.3.80 = 0320332023335100232212013231251-3250001
|
||
AiPlayerbot.PremadeSpecName.1.4 = fury pvp
|
||
AiPlayerbot.PremadeSpecGlyph.1.4 = 43432,43397,43417,43395,43396,43418
|
||
AiPlayerbot.PremadeSpecLink.1.4.60 = -325000131500212250120511351
|
||
AiPlayerbot.PremadeSpecLink.1.4.80 = 03220300233-325000131500212250122511351
|
||
AiPlayerbot.PremadeSpecName.1.5 = prot pvp
|
||
AiPlayerbot.PremadeSpecGlyph.1.5 = 43425,43397,43415,43396,49084,45792
|
||
AiPlayerbot.PremadeSpecLink.1.5.60 = --250031220223012520332113321
|
||
AiPlayerbot.PremadeSpecLink.1.5.80 = 0502300123-3-250031220223012521332113321
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# PALADIN
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.2.0 = holy pve
|
||
AiPlayerbot.PremadeSpecGlyph.2.0 = 41106,43367,45741,43368,43365,41109
|
||
AiPlayerbot.PremadeSpecLink.2.0.60 = 50350151020013053100515221
|
||
AiPlayerbot.PremadeSpecLink.2.0.80 = 50350152100013053100515221-50320104203
|
||
AiPlayerbot.PremadeSpecName.2.1 = prot pve
|
||
AiPlayerbot.PremadeSpecGlyph.2.1 = 41100,43367,43869,43368,43369,45745
|
||
AiPlayerbot.PremadeSpecLink.2.1.60 = -05005135203102311333112321
|
||
AiPlayerbot.PremadeSpecLink.2.1.80 = -05005135203102311333312321-502302012003
|
||
AiPlayerbot.PremadeSpecName.2.2 = ret pve
|
||
AiPlayerbot.PremadeSpecGlyph.2.2 = 41092,43367,41099,43368,43340,43869
|
||
AiPlayerbot.PremadeSpecLink.2.2.60 = --05230051203331302133231131
|
||
AiPlayerbot.PremadeSpecLink.2.2.65 = -05-05230051203331302133231131
|
||
AiPlayerbot.PremadeSpecLink.2.2.80 = 050501-05-05232051203331302133231331
|
||
AiPlayerbot.PremadeSpecName.2.3 = holy pvp
|
||
AiPlayerbot.PremadeSpecGlyph.2.3 = 41110,43367,45746,43369,43365,45747
|
||
AiPlayerbot.PremadeSpecLink.2.3.60 = 50332150300013050133215221
|
||
AiPlayerbot.PremadeSpecLink.2.3.80 = 50332150300013050133315221-5032013122
|
||
AiPlayerbot.PremadeSpecName.2.4 = prot pvp
|
||
AiPlayerbot.PremadeSpecGlyph.2.4 = 41092,43367,41101,43369,43365,45745
|
||
AiPlayerbot.PremadeSpecLink.2.4.60 = -15320130223122311323311321
|
||
AiPlayerbot.PremadeSpecLink.2.4.80 = -15320130223122321333312321-052300502
|
||
AiPlayerbot.PremadeSpecName.2.5 = ret pvp
|
||
AiPlayerbot.PremadeSpecGlyph.2.5 = 41095,43367,41102,43369,43365,45747
|
||
AiPlayerbot.PremadeSpecLink.2.5.60 = --05230250203331222133201321
|
||
AiPlayerbot.PremadeSpecLink.2.5.80 = -1532013022-05230250203331322133201321
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# HUNTER
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.3.0 = bm pve
|
||
AiPlayerbot.PremadeSpecGlyph.3.0 = 42912,43350,42902,43351,43338,42914
|
||
AiPlayerbot.PremadeSpecLink.3.0.40 = 512002015051122301
|
||
AiPlayerbot.PremadeSpecLink.3.0.60 = 51200201505112233110531151
|
||
AiPlayerbot.PremadeSpecLink.3.0.80 = 51200201505112233111531351-0323031-5
|
||
AiPlayerbot.PremadeSpecName.3.1 = mm pve
|
||
AiPlayerbot.PremadeSpecGlyph.3.1 = 42912,43350,45625,43351,43338,42914
|
||
AiPlayerbot.PremadeSpecLink.3.1.60 = -035305101030013233115031151
|
||
AiPlayerbot.PremadeSpecLink.3.1.80 = 502-035305101230013233135031351-5000002
|
||
AiPlayerbot.PremadeSpecName.3.2 = surv pve
|
||
AiPlayerbot.PremadeSpecGlyph.3.2 = 45733,43350,45731,43351,43338,45732
|
||
AiPlayerbot.PremadeSpecLink.3.2.60 = --5000032500033330502135201311
|
||
AiPlayerbot.PremadeSpecLink.3.2.80 = -005305101-5000032500033330532135301321
|
||
AiPlayerbot.PremadeSpecName.3.3 = bm pvp
|
||
AiPlayerbot.PremadeSpecGlyph.3.3 = 42897,42900,42902,43356,43338,42900
|
||
AiPlayerbot.PremadeSpecLink.3.3.60 = 05203201505012233100531151
|
||
AiPlayerbot.PremadeSpecLink.3.3.80 = 05203201505012233100531351-005305101-03
|
||
AiPlayerbot.PremadeSpecName.3.4 = mm pvp
|
||
AiPlayerbot.PremadeSpecGlyph.3.4 = 42912,43351,42897,43338,43356,42904
|
||
AiPlayerbot.PremadeSpecLink.3.4.60 = -034305101030213231135031051
|
||
AiPlayerbot.PremadeSpecLink.3.4.80 = -035305101030213233135031051-53013020102
|
||
AiPlayerbot.PremadeSpecName.3.5 = surv pvp
|
||
AiPlayerbot.PremadeSpecGlyph.3.5 = 42912,43350,42904,43356,43338,45731
|
||
AiPlayerbot.PremadeSpecLink.3.5.60 = --2300302410233030533135001031
|
||
AiPlayerbot.PremadeSpecLink.3.5.80 = -005305201-2300302510233330533135001031
|
||
|
||
|
||
# HUNTER PET
|
||
#
|
||
# Ferocity
|
||
AiPlayerbot.PremadeHunterPetLink.0.16 = 2100003130003010101
|
||
AiPlayerbot.PremadeHunterPetLink.0.20 = 2100003130103010122
|
||
# Tenacity
|
||
AiPlayerbot.PremadeHunterPetLink.1.16 = 21103000300120101001
|
||
AiPlayerbot.PremadeHunterPetLink.1.20 = 21303010300120101002
|
||
# Cunning
|
||
AiPlayerbot.PremadeHunterPetLink.2.16 = 2100020330000211001
|
||
AiPlayerbot.PremadeHunterPetLink.2.20 = 21000203300002110221
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# ROGUE
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.4.0 = as pve
|
||
AiPlayerbot.PremadeSpecGlyph.4.0 = 45768,43379,45761,43380,43378,45766
|
||
AiPlayerbot.PremadeSpecLink.4.0.60 = 005303104352100520103331051
|
||
AiPlayerbot.PremadeSpecLink.4.0.80 = 005303005352100520103331051-005005003-502
|
||
AiPlayerbot.PremadeSpecName.4.1 = combat pve
|
||
AiPlayerbot.PremadeSpecGlyph.4.1 = 42962,43379,45762,43380,43378,42969
|
||
AiPlayerbot.PremadeSpecLink.4.1.60 = -0252051000035015223100501251
|
||
AiPlayerbot.PremadeSpecLink.4.1.80 = 00532000523-0252051000035015223100501251
|
||
AiPlayerbot.PremadeSpecName.4.2 = subtlety pve
|
||
AiPlayerbot.PremadeSpecGlyph.4.2 = 42967,43379,45764,43380,43378,45767
|
||
AiPlayerbot.PremadeSpecLink.4.2.60 = --5022012030321121350115031151
|
||
AiPlayerbot.PremadeSpecLink.4.2.80 = 30532010114--5022012030321121350115031151
|
||
AiPlayerbot.PremadeSpecName.4.3 = as pvp
|
||
AiPlayerbot.PremadeSpecGlyph.4.3 = 42974,43380,45768,43379,43376,42971
|
||
AiPlayerbot.PremadeSpecLink.4.3.60 = 005303103342102522103031--50002
|
||
AiPlayerbot.PremadeSpecLink.4.3.80 = 005303103342102522103031-004-532023203000012
|
||
AiPlayerbot.PremadeSpecName.4.4 = combat pvp
|
||
AiPlayerbot.PremadeSpecGlyph.4.4 = 42972,43380,45762,43376,43378,42971
|
||
AiPlayerbot.PremadeSpecLink.4.4.60 = -3250002050225010223102321251
|
||
AiPlayerbot.PremadeSpecLink.4.4.80 = 305120105-3250002050235010223102521251
|
||
AiPlayerbot.PremadeSpecName.4.5 = subtlety pvp
|
||
AiPlayerbot.PremadeSpecGlyph.4.5 = 42968,43376,45764,43380,43379,42971
|
||
AiPlayerbot.PremadeSpecLink.4.5.60 = --5120212030320121330133221251
|
||
AiPlayerbot.PremadeSpecLink.4.5.80 = 3023031-3-5120212030320121350135231251
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# PRIEST
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.5.0 = disc pve
|
||
AiPlayerbot.PremadeSpecGlyph.5.0 = 42408,43371,42400,43374,43342,45756
|
||
AiPlayerbot.PremadeSpecLink.5.0.60 = 0503203130300512301323131051
|
||
AiPlayerbot.PremadeSpecLink.5.0.80 = 0503203130300512331323231251-03520103
|
||
AiPlayerbot.PremadeSpecName.5.1 = holy pve
|
||
AiPlayerbot.PremadeSpecGlyph.5.1 = 42408,43371,42400,43374,43342,42396
|
||
AiPlayerbot.PremadeSpecLink.5.1.60 = -035050031301152530000331331
|
||
AiPlayerbot.PremadeSpecLink.5.1.80 = 05032031-235050032302152530000331351
|
||
AiPlayerbot.PremadeSpecName.5.2 = shadow pve
|
||
AiPlayerbot.PremadeSpecGlyph.5.2 = 45753,43371,42407,43374,43370,42415
|
||
AiPlayerbot.PremadeSpecLink.5.2.60 = --325003041203010323150301351
|
||
AiPlayerbot.PremadeSpecLink.5.2.80 = 0503203--325023051223010323152301351
|
||
AiPlayerbot.PremadeSpecName.5.3 = disc pvp
|
||
AiPlayerbot.PremadeSpecGlyph.5.3 = 42408,43371,45760,43370,43374,45756
|
||
AiPlayerbot.PremadeSpecLink.5.3.60 = 5003203130320512201323031051
|
||
AiPlayerbot.PremadeSpecLink.5.3.80 = 5003203130322512331013231151-23050113
|
||
AiPlayerbot.PremadeSpecName.5.4 = holy pvp
|
||
AiPlayerbot.PremadeSpecGlyph.5.4 = 42411,43371,42408,43370,43374,45755
|
||
AiPlayerbot.PremadeSpecLink.5.4.60 = -235501031000152430320031151
|
||
AiPlayerbot.PremadeSpecLink.5.4.80 = 500320313-235501031000152530320031351
|
||
AiPlayerbot.PremadeSpecName.5.5 = shadow pvp
|
||
AiPlayerbot.PremadeSpecGlyph.5.5 = 42407,43371,45753,43370,43374,42408
|
||
AiPlayerbot.PremadeSpecLink.5.5.60 = --005323241223112003102311351
|
||
AiPlayerbot.PremadeSpecLink.5.5.80 = 50332031003--005323241223112003102311351
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# DEATH KNIGHT
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.6.0 = blood pve
|
||
AiPlayerbot.PremadeSpecGlyph.6.0 = 45805,43673,43538,43544,43672,43542
|
||
AiPlayerbot.PremadeSpecLink.6.0.60 = 035502150300331320102013111-005
|
||
AiPlayerbot.PremadeSpecLink.6.0.80 = 0055021533303310201020131-305020510002-00522
|
||
AiPlayerbot.PremadeSpecName.6.1 = frost pve
|
||
AiPlayerbot.PremadeSpecGlyph.6.1 = 45805,43673,43547,43544,43672,43543
|
||
AiPlayerbot.PremadeSpecLink.6.1.60 = -32003350332203012300023101351
|
||
AiPlayerbot.PremadeSpecLink.6.1.80 = -32002350352203012300033101351-230200305003
|
||
AiPlayerbot.PremadeSpecName.6.2 = unholy pve
|
||
AiPlayerbot.PremadeSpecGlyph.6.2 = 43542,43673,43546,43535,43672,43549
|
||
AiPlayerbot.PremadeSpecLink.6.2.60 = --2301303050032151000150013131151
|
||
AiPlayerbot.PremadeSpecLink.6.2.80 = 23050202--2302303350032152000150003133151
|
||
AiPlayerbot.PremadeSpecName.6.3 = double aura blood pve
|
||
AiPlayerbot.PremadeSpecGlyph.6.3 = 45805,43673,43538,43544,43672,43554
|
||
AiPlayerbot.PremadeSpecLink.6.3.60 = 005512153330030320102013-305
|
||
AiPlayerbot.PremadeSpecLink.6.3.80 = 005512153330030320102013-3050505002023001-002
|
||
AiPlayerbot.PremadeSpecName.6.4 = blood pvp
|
||
AiPlayerbot.PremadeSpecGlyph.6.4 = 43534,43535,45799,43673,43672,45805
|
||
AiPlayerbot.PremadeSpecLink.6.4.60 = 2305021503003313201222101351
|
||
AiPlayerbot.PremadeSpecLink.6.4.80 = 2305021503003313201222101351--032232300023
|
||
AiPlayerbot.PremadeSpecName.6.5 = frost pvp
|
||
AiPlayerbot.PremadeSpecGlyph.6.5 = 43543,43539,45800,43673,43672,45806
|
||
AiPlayerbot.PremadeSpecLink.6.5.60 = -32015351022203012001233101251
|
||
AiPlayerbot.PremadeSpecLink.6.5.80 = 0055-32015351052203012001233131351-03
|
||
AiPlayerbot.PremadeSpecName.6.6 = unholy pvp
|
||
AiPlayerbot.PremadeSpecGlyph.6.6 = 45804,43539,43549,43673,43672,45805
|
||
AiPlayerbot.PremadeSpecLink.6.6.60 = --2301323301002152230101203103151
|
||
AiPlayerbot.PremadeSpecLink.6.6.80 = -320050410002-2301323301002152230101203133151
|
||
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# SHAMAN
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.7.0 = ele pve
|
||
AiPlayerbot.PremadeSpecGlyph.7.0 = 41536,43385,41532,43386,44923,45776
|
||
AiPlayerbot.PremadeSpecLink.7.0.60 = 4530001520213351102301351
|
||
AiPlayerbot.PremadeSpecLink.7.0.80 = 4530001523213351302301351-00525003
|
||
AiPlayerbot.PremadeSpecName.7.1 = enh pve
|
||
AiPlayerbot.PremadeSpecGlyph.7.1 = 41542,43385,41539,43386,43725,45771
|
||
AiPlayerbot.PremadeSpecLink.7.1.60 = -30305003105021333031121131051
|
||
AiPlayerbot.PremadeSpecLink.7.1.80 = 053030152-30305003105021333031131131051
|
||
AiPlayerbot.PremadeSpecName.7.2 = resto pve
|
||
AiPlayerbot.PremadeSpecGlyph.7.2 = 41527,43385,41517,43386,43725,45775
|
||
AiPlayerbot.PremadeSpecLink.7.2.60 = --50005301235310501102321251
|
||
AiPlayerbot.PremadeSpecLink.7.2.80 = -00502033-50005331335310501122331251
|
||
AiPlayerbot.PremadeSpecName.7.3 = ele pvp
|
||
AiPlayerbot.PremadeSpecGlyph.7.3 = 45778,43388,45770,43725,43386,41524
|
||
AiPlayerbot.PremadeSpecLink.7.3.60 = 0533001503213051322301341
|
||
AiPlayerbot.PremadeSpecLink.7.3.80 = 0533051503213051322331351-023212001
|
||
AiPlayerbot.PremadeSpecName.7.4 = enh pvp
|
||
AiPlayerbot.PremadeSpecGlyph.7.4 = 45778,43388,41526,43725,43344,45771
|
||
AiPlayerbot.PremadeSpecLink.7.4.60 = -02305203105001333201131131151
|
||
AiPlayerbot.PremadeSpecLink.7.4.80 = 0503351-02305203105001333211131231251
|
||
AiPlayerbot.PremadeSpecName.7.5 = resto pvp
|
||
AiPlayerbot.PremadeSpecGlyph.7.5 = 45778,43388,45775,43725,43344,41535
|
||
AiPlayerbot.PremadeSpecLink.7.5.60 = --05032331331013501120321251
|
||
AiPlayerbot.PremadeSpecLink.7.5.80 = -023222301004-05032331331013501120331251
|
||
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# MAGE
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.8.0 = arcane pve
|
||
AiPlayerbot.PremadeSpecGlyph.8.0 = 42735,43339,44955,43364,43361,42751
|
||
AiPlayerbot.PremadeSpecLink.8.0.60 = 230005231100330150323102500321
|
||
AiPlayerbot.PremadeSpecLink.8.0.80 = 230005231100330150323102505321-03-203303001
|
||
AiPlayerbot.PremadeSpecName.8.1 = fire pve
|
||
AiPlayerbot.PremadeSpecGlyph.8.1 = 42739,43339,45737,43364,44920,42751
|
||
AiPlayerbot.PremadeSpecLink.8.1.60 = -0055030011302231053120321341
|
||
AiPlayerbot.PremadeSpecLink.8.1.80 = 23000503110003-0055032012303330053120300351
|
||
AiPlayerbot.PremadeSpecName.8.2 = frost pve
|
||
AiPlayerbot.PremadeSpecGlyph.8.2 = 42742,43339,50045,43364,43361,42751
|
||
AiPlayerbot.PremadeSpecLink.8.2.60 = --0533030313203100030152231151
|
||
AiPlayerbot.PremadeSpecLink.8.2.80 = 23002303110003--0533030313203100030152231351
|
||
AiPlayerbot.PremadeSpecName.8.3 = frostfire pve
|
||
AiPlayerbot.PremadeSpecGlyph.8.3 = 44684,44920,42751,43339,43364,45737
|
||
AiPlayerbot.PremadeSpecLink.8.3.60 = -2305032012303331053120300051
|
||
AiPlayerbot.PremadeSpecLink.8.3.80 = -2305032012303331053120321351-023302031
|
||
AiPlayerbot.PremadeSpecName.8.4 = arcane pvp
|
||
AiPlayerbot.PremadeSpecGlyph.8.4 = 42735,43364,42738,43360,43357,42752
|
||
AiPlayerbot.PremadeSpecLink.8.4.60 = 205323200122032103303102015221
|
||
AiPlayerbot.PremadeSpecLink.8.4.80 = 205323200122032103303102015321-23002-303020301
|
||
AiPlayerbot.PremadeSpecName.8.5 = fire pvp
|
||
AiPlayerbot.PremadeSpecGlyph.8.5 = 42738,43364,42752,43360,43357,45737
|
||
AiPlayerbot.PremadeSpecLink.8.5.60 = -2305202312020031223122301351
|
||
AiPlayerbot.PremadeSpecLink.8.5.80 = 230321030122-2305212312020031223122301351
|
||
AiPlayerbot.PremadeSpecName.8.6 = frost pvp
|
||
AiPlayerbot.PremadeSpecGlyph.8.6 = 42738,43364,45740,43357,43360,42752
|
||
AiPlayerbot.PremadeSpecLink.8.6.60 = --3533203210203100232102231151
|
||
AiPlayerbot.PremadeSpecLink.8.6.80 = 23032103010203--3533203210203100232102231151
|
||
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# WARLOCK
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.9.0 = affli pve
|
||
AiPlayerbot.PremadeSpecGlyph.9.0 = 45785,43390,50077,43394,43393,45779
|
||
AiPlayerbot.PremadeSpecLink.9.0.60 = 2350022001113510053500131151
|
||
AiPlayerbot.PremadeSpecLink.9.0.70 = 2350022001113510053500131151--55
|
||
AiPlayerbot.PremadeSpecLink.9.0.80 = 2350022001123510253500331151--55000005
|
||
AiPlayerbot.PremadeSpecName.9.1 = demo pve
|
||
AiPlayerbot.PremadeSpecGlyph.9.1 = 45785,43390,50077,43394,43393,42459
|
||
AiPlayerbot.PremadeSpecLink.9.1.60 = -003203301135112530135201051
|
||
AiPlayerbot.PremadeSpecLink.9.1.70 = -003203301135112530135201051-55
|
||
AiPlayerbot.PremadeSpecLink.9.1.80 = -003203301135112530135221351-55000005
|
||
AiPlayerbot.PremadeSpecName.9.2 = destro pve
|
||
AiPlayerbot.PremadeSpecGlyph.9.2 = 45785,43390,42454,43394,43393,42453
|
||
AiPlayerbot.PremadeSpecLink.9.2.60 = --05203215200231051305031151
|
||
AiPlayerbot.PremadeSpecLink.9.2.80 = 23-0302-05203215220331051335231351
|
||
AiPlayerbot.PremadeSpecName.9.3 = affli pvp
|
||
AiPlayerbot.PremadeSpecGlyph.9.3 = 50077,43392,42455,43390,43389,45783
|
||
AiPlayerbot.PremadeSpecLink.9.3.60 = 0350002231223011053502301151
|
||
AiPlayerbot.PremadeSpecLink.9.3.80 = 2350002231223111053502301151-2032003011302
|
||
AiPlayerbot.PremadeSpecName.9.4 = demo pvp
|
||
AiPlayerbot.PremadeSpecGlyph.9.4 = 42459,43392,45780,43390,43389,45783
|
||
AiPlayerbot.PremadeSpecLink.9.4.60 = -003203301135202530135001251
|
||
AiPlayerbot.PremadeSpecLink.9.4.80 = -003203301135202530135011351-052300152
|
||
AiPlayerbot.PremadeSpecName.9.5 = destro pvp
|
||
AiPlayerbot.PremadeSpecGlyph.9.5 = 42471,43392,42454,43390,43389,45783
|
||
AiPlayerbot.PremadeSpecLink.9.5.60 = --05230015220331351005031051
|
||
AiPlayerbot.PremadeSpecLink.9.5.80 = -2032003311302-05230015220331351005031051
|
||
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# DRUID
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.PremadeSpecName.11.0 = balance pve
|
||
AiPlayerbot.PremadeSpecGlyph.11.0 = 40916,43331,40921,43335,44922,40919
|
||
AiPlayerbot.PremadeSpecLink.11.0.60 = 5032003125031003213304301231
|
||
AiPlayerbot.PremadeSpecLink.11.0.80 = 5032003125331303213305301231--205003012
|
||
AiPlayerbot.PremadeSpecName.11.1 = bear pve
|
||
AiPlayerbot.PremadeSpecGlyph.11.1 = 40897,43331,46372,43335,43332,40899
|
||
AiPlayerbot.PremadeSpecLink.11.1.60 = -503232132322010303120300013501
|
||
AiPlayerbot.PremadeSpecLink.11.1.80 = -503232132322010353120303013511-20350001
|
||
AiPlayerbot.PremadeSpecName.11.2 = resto pve
|
||
AiPlayerbot.PremadeSpecGlyph.11.2 = 40906,43331,45602,43335,43674,45603
|
||
AiPlayerbot.PremadeSpecLink.11.2.60 = --230033312031502331050313031
|
||
AiPlayerbot.PremadeSpecLink.11.2.80 = 05320031--230033312031502431053313051
|
||
AiPlayerbot.PremadeSpecName.11.3 = cat pve
|
||
AiPlayerbot.PremadeSpecGlyph.11.3 = 40902,43331,40901,43674,43335,45604
|
||
AiPlayerbot.PremadeSpecLink.11.3.60 = -552202032322010053100030310501
|
||
AiPlayerbot.PremadeSpecLink.11.3.80 = -553202032322010053120030310511-203503012
|
||
AiPlayerbot.PremadeSpecName.11.4 = balance pvp
|
||
AiPlayerbot.PremadeSpecGlyph.11.4 = 40921,43331,45622,43674,43335,45623
|
||
AiPlayerbot.PremadeSpecLink.11.4.60 = 5012203115331002213032311231
|
||
AiPlayerbot.PremadeSpecLink.11.4.80 = 5022203125331003213035311231--230033012
|
||
AiPlayerbot.PremadeSpecName.11.5 = cat pvp
|
||
AiPlayerbot.PremadeSpecGlyph.11.5 = 40902,43331,45601,43674,43335,40901
|
||
AiPlayerbot.PremadeSpecLink.11.5.60 = -513202032322010053103030310501
|
||
AiPlayerbot.PremadeSpecLink.11.5.80 = -523202032322010053103030310511-205503012
|
||
AiPlayerbot.PremadeSpecName.11.6 = resto pvp
|
||
AiPlayerbot.PremadeSpecGlyph.11.6 = 40913,43331,40906,43335,43674,45623
|
||
AiPlayerbot.PremadeSpecLink.11.6.60 = --230033312031500511350013051
|
||
AiPlayerbot.PremadeSpecLink.11.6.80 = 05320021--230033312031500531353013251
|
||
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
###################################
|
||
# #
|
||
# WORLD BUFFS #
|
||
# #
|
||
###################################
|
||
|
||
####################################################################################################
|
||
#
|
||
#
|
||
#
|
||
|
||
# Applies automatically refreshing buffs to bots simulating effects of spells, flasks, food, runes, etc.
|
||
# Requires sending the command "nc +worldbuff" in chat to a bot (or a group of bots) to enable
|
||
# Each entry in the matrix should be formatted as follows: Entry:FactionID,ClassID,SpecID,MinimumLevel,MaximumLevel:SpellID1,SpellID2,etc.;
|
||
# FactionID may be set to 0 for the entry to apply buffs to bots of either faction
|
||
# The default entries create a cross-faction level 60-69 Vanilla buffs, level 70-79 TBC buffs, and level 80 buffs for each implemented pve spec from the "Premade Specs" section
|
||
# The default entries may be deleted or modified, and new custom entries may be added
|
||
|
||
AiPlayerbot.WorldBuffMatrix = # WARRIOR ARMS 1:0,1,0,80,80:53760,57358; # WARRIOR FURY 2:0,1,1,80,80:53760,57358; # WARRIOR PROTECTION 3:0,1,2,80,80:53758,57356; # PALADIN HOLY 4:0,2,0,80,80:53749,57332,60347; # PALADIN PROTECTION 5:0,2,1,80,80:53758,57356; # PALADIN RETRIBUTION 6:0,2,2,80,80:53760,57371; # HUNTER BEAST 7:0,3,0,80,80:53760,57325; # HUNTER MARKSMANSHIP 8:0,3,1,80,80:53760,57358; # HUNTER SURVIVAL 9:0,3,2,80,80:53760,57367; # ROGUE ASSASSINATION 10:0,4,0,80,80:53760,57325; # ROGUE COMBAT 11:0,4,1,80,80:53760,57358; # ROGUE SUBTLETY 12:0,4,2,80,80:53760,57367; # PRIEST DISCIPLINE 13:0,5,0,80,80:53755,57327; # PRIEST HOLY 14:0,5,1,80,80:53755,57327; # PRIEST SHADOW 15:0,5,2,80,80:53755,57327; # DEATH KNIGHT BLOOD 16:0,6,0,80,80:53758,57356; # DEATH KNIGHT FROST 17:0,6,1,80,80:53760,57358; # DEATH KNIGHT UNHOLY 18:0,6,2,80,80:53760,57358; # DEATH KNIGHT BLOOD DPS 19:0,6,3,80,80:53760,57371; # SHAMAN ELEMENTAL 20:0,7,0,80,80:53755,57327; # SHAMAN ENHANCEMENT 21:0,7,1,80,80:53760,57325; # SHAMAN RESTORATION 22:0,7,2,80,80:53755,57327; # MAGE ARCANE 23:0,8,0,80,80:53755,57327; # MAGE FIRE 24:0,8,1,80,80:53755,57327; # MAGE FROST 25:0,8,2,80,80:53755,57327; # WARLOCK AFFLICTION 26:0,9,0,80,80:53755,57327; # WARLOCK DEMONOLOGY 27:0,9,1,80,80:53755,57327; # WARLOCK DESTRUCTION 28:0,9,2,80,80:53755,57327; # DRUID BALANCE 29:0,11,0,80,80:53755,57327; # DRUID FERAL BEAR 30:0,11,1,80,80:53749,53763,57367; # DRUID RESTORATION 31:0,11,2,80,80:54212,57334; # DRUID FERAL CAT 32:0,11,3,80,80:53760,57358; # WARRIOR ARMS TBC 33:0,1,0,70,79:28520,33256; # WARRIOR FURY TBC 34:0,1,1,70,79:28520,33256; # WARRIOR PROTECTION TBC 35:0,1,2,70,79:28518,33257; # PALADIN HOLY TBC 36:0,2,0,70,79:28491,39627,33263; # PALADIN PROTECTION TBC 37:0,2,1,70,79:28518,33257; # PALADIN RETRIBUTION TBC 38:0,2,2,70,79:28520,33256; # HUNTER BEAST TBC 39:0,3,0,70,79:28520,33261; # HUNTER MARKSMANSHIP TBC 40:0,3,1,70,79:28520,33261; # HUNTER SURVIVAL TBC 41:0,3,2,70,79:28520,33261; # ROGUE ASSASSINATION TBC 42:0,4,0,70,79:28520,33261; # ROGUE COMBAT TBC 43:0,4,1,70,79:28520,33261; # ROGUE SUBTLETY TBC 44:0,4,2,70,79:28520,33261; # PRIEST DISCIPLINE TBC 45:0,5,0,70,79:28491,39627,33263; # PRIEST HOLY TBC 46:0,5,1,70,79:28491,39627,33263; # PRIEST SHADOW TBC 47:0,5,2,70,79:28540,33263; # SHAMAN ELEMENTAL TBC 48:0,7,0,70,79:28521,33263; # SHAMAN ENHANCEMENT TBC 49:0,7,1,70,79:28520,33261; # SHAMAN RESTORATION TBC 50:0,7,2,70,79:28491,39627,33263; # MAGE ARCANE TBC 51:0,8,0,70,79:28521,33263; # MAGE FIRE TBC 52:0,8,1,70,79:28540,33263; # MAGE FROST TBC 53:0,8,2,70,79:28540,33263; # WARLOCK AFFLICTION TBC 54:0,9,0,70,79:28540,33263; # WARLOCK DEMONOLOGY TBC 55:0,9,1,70,79:28540,33263; # WARLOCK DESTRUCTION TBC 56:0,9,2,70,79:28540,33263; # DRUID BALANCE TBC 57:0,11,0,70,79:28521,33263; # DRUID FERAL BEAR TBC 58:0,11,1,70,79:28518,33257; # DRUID RESTORATION TBC 59:0,11,2,70,79:28491,39627,33263; # DRUID FERAL CAT TBC 60:0,11,3,70,79:28520,33261; # WARRIOR ARMS VANILLA 61:0,1,0,60,69:17538,24799; # WARRIOR FURY VANILLA 62:0,1,1,60,69:17538,24799; # WARRIOR PROTECTION VANILLA 63:0,1,2,60,69:17626,25661; # PALADIN HOLY VANILLA 64:0,2,0,60,69:17627,18194; # PALADIN PROTECTION VANILLA 65:0,2,1,60,69:17626,25661; # PALADIN RETRIBUTION VANILLA 66:0,2,2,60,69:17628,24799; # HUNTER BEAST VANILLA 67:0,3,0,60,69:17538,18192; # HUNTER MARKSMANSHIP VANILLA 68:0,3,1,60,69:17538,18192; # HUNTER SURVIVAL VANILLA 69:0,3,2,60,69:17538,18192; # ROGUE ASSASSINATION VANILLA 70:0,4,0,60,69:17538,18192; # ROGUE COMBAT VANILLA 71:0,4,1,60,69:17538,18192; # ROGUE SUBTLETY VANILLA 72:0,4,2,60,69:17538,18192; # PRIEST DISCIPLINE VANILLA 73:0,5,0,60,69:17628,18194; # PRIEST HOLY VANILLA 74:0,5,1,60,69:17627,18194; # PRIEST SHADOW VANILLA 75:0,5,2,60,69:17628,18194; # SHAMAN ELEMENTAL VANILLA 76:0,7,0,60,69:17628,18194; # SHAMAN ENHANCEMENT VANILLA 77:0,7,1,60,69:17538,24799; # SHAMAN RESTORATION VANILLA 78:0,7,2,60,69:17627,18194; # MAGE ARCANE VANILLA 79:0,8,0,60,69:17628,18194; # MAGE FIRE VANILLA 80:0,8,1,60,69:17628,18194; # MAGE FROST VANILLA 81:0,8,2,60,69:17628,18194; # WARLOCK AFFLICTION VANILLA 82:0,9,0,60,69:17628,25661; # WARLOCK DEMONOLOGY VANILLA 83:0,9,1,60,69:17628,25661; # WARLOCK DESTRUCTION VANILLA 84:0,9,2,60,69:17628,25661; # DRUID BALANCE VANILLA 85:0,11,0,60,69:17628,18194; # DRUID FERAL BEAR VANILLA 86:0,11,1,60,69:17626,25661; # DRUID RESTORATION VANILLA 87:0,11,2,60,69:17627,18194; # DRUID FERAL CAT VANILLA 88:0,11,3,60,69:17538,24799
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
###################################
|
||
# #
|
||
# RANDOMBOT DEFAULT TALENT SPECS #
|
||
# #
|
||
###################################
|
||
|
||
####################################################################################################
|
||
#
|
||
#
|
||
#
|
||
|
||
# AiPlayerbot.RandomClassSpecProb.<class>.<specno> # The probability to choose the spec
|
||
# AiPlayerbot.RandomClassSpecIndex.<class>.<specno> # The spec index in PremadeSpec
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# WARRIOR
|
||
#
|
||
#
|
||
|
||
# arms pve
|
||
AiPlayerbot.RandomClassSpecProb.1.0 = 20
|
||
AiPlayerbot.RandomClassSpecIndex.1.0 = 0
|
||
# fury pve
|
||
AiPlayerbot.RandomClassSpecProb.1.1 = 40
|
||
AiPlayerbot.RandomClassSpecIndex.1.1 = 1
|
||
# prot pve
|
||
AiPlayerbot.RandomClassSpecProb.1.2 = 40
|
||
AiPlayerbot.RandomClassSpecIndex.1.2 = 2
|
||
# arms pvp
|
||
AiPlayerbot.RandomClassSpecProb.1.3 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.1.3 = 3
|
||
# fury pvp
|
||
AiPlayerbot.RandomClassSpecProb.1.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.1.4 = 4
|
||
# prot pvp
|
||
AiPlayerbot.RandomClassSpecProb.1.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.1.5 = 5
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# PALADIN
|
||
#
|
||
#
|
||
|
||
# holy pve
|
||
AiPlayerbot.RandomClassSpecProb.2.0 = 30
|
||
AiPlayerbot.RandomClassSpecIndex.2.0 = 0
|
||
# prot pve
|
||
AiPlayerbot.RandomClassSpecProb.2.1 = 40
|
||
AiPlayerbot.RandomClassSpecIndex.2.1 = 1
|
||
# ret pve
|
||
AiPlayerbot.RandomClassSpecProb.2.2 = 30
|
||
AiPlayerbot.RandomClassSpecIndex.2.2 = 2
|
||
# holy pvp
|
||
AiPlayerbot.RandomClassSpecProb.2.3 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.2.3 = 3
|
||
# prot pvp
|
||
AiPlayerbot.RandomClassSpecProb.2.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.2.4 = 4
|
||
# ret pvp
|
||
AiPlayerbot.RandomClassSpecProb.2.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.2.5 = 5
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# HUNTER
|
||
#
|
||
#
|
||
|
||
# bm pve
|
||
AiPlayerbot.RandomClassSpecProb.3.0 = 33
|
||
AiPlayerbot.RandomClassSpecIndex.3.0 = 0
|
||
# mm pve
|
||
AiPlayerbot.RandomClassSpecProb.3.1 = 33
|
||
AiPlayerbot.RandomClassSpecIndex.3.1 = 1
|
||
# surv pve
|
||
AiPlayerbot.RandomClassSpecProb.3.2 = 33
|
||
AiPlayerbot.RandomClassSpecIndex.3.2 = 2
|
||
# bm pvp
|
||
AiPlayerbot.RandomClassSpecProb.3.3 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.3.3 = 3
|
||
# mm pvp
|
||
AiPlayerbot.RandomClassSpecProb.3.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.3.4 = 4
|
||
# surv pvp
|
||
AiPlayerbot.RandomClassSpecProb.3.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.3.5 = 5
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# ROGUE
|
||
#
|
||
#
|
||
|
||
# as pve
|
||
AiPlayerbot.RandomClassSpecProb.4.0 = 45
|
||
AiPlayerbot.RandomClassSpecIndex.4.0 = 0
|
||
# combat pve
|
||
AiPlayerbot.RandomClassSpecProb.4.1 = 45
|
||
AiPlayerbot.RandomClassSpecIndex.4.1 = 1
|
||
# subtlety pve
|
||
AiPlayerbot.RandomClassSpecProb.4.2 = 10
|
||
AiPlayerbot.RandomClassSpecIndex.4.2 = 2
|
||
# as pvp
|
||
AiPlayerbot.RandomClassSpecProb.4.3 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.4.3 = 3
|
||
# combat pvp
|
||
AiPlayerbot.RandomClassSpecProb.4.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.4.4 = 4
|
||
# subtlety pvp
|
||
AiPlayerbot.RandomClassSpecProb.4.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.4.5 = 5
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# PRIEST
|
||
#
|
||
#
|
||
|
||
# disc pve
|
||
AiPlayerbot.RandomClassSpecProb.5.0 = 40
|
||
AiPlayerbot.RandomClassSpecIndex.5.0 = 0
|
||
# holy pve
|
||
AiPlayerbot.RandomClassSpecProb.5.1 = 35
|
||
AiPlayerbot.RandomClassSpecIndex.5.1 = 1
|
||
# shadow pve
|
||
AiPlayerbot.RandomClassSpecProb.5.2 = 25
|
||
AiPlayerbot.RandomClassSpecIndex.5.2 = 2
|
||
# disc pvp
|
||
AiPlayerbot.RandomClassSpecProb.5.3 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.5.3 = 3
|
||
# holy pvp
|
||
AiPlayerbot.RandomClassSpecProb.5.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.5.4 = 4
|
||
# shadow pvp
|
||
AiPlayerbot.RandomClassSpecProb.5.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.5.5 = 5
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# DEATH KNIGHT
|
||
#
|
||
#
|
||
|
||
# blood pve
|
||
AiPlayerbot.RandomClassSpecProb.6.0 = 30
|
||
AiPlayerbot.RandomClassSpecIndex.6.0 = 0
|
||
# frost pve
|
||
AiPlayerbot.RandomClassSpecProb.6.1 = 40
|
||
AiPlayerbot.RandomClassSpecIndex.6.1 = 1
|
||
# unholy pve
|
||
AiPlayerbot.RandomClassSpecProb.6.2 = 30
|
||
AiPlayerbot.RandomClassSpecIndex.6.2 = 2
|
||
# double aura blood pve
|
||
AiPlayerbot.RandomClassSpecProb.6.3 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.6.3 = 3
|
||
# blood pvp
|
||
AiPlayerbot.RandomClassSpecProb.6.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.6.4 = 4
|
||
# frost pvp
|
||
AiPlayerbot.RandomClassSpecProb.6.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.6.5 = 5
|
||
# unholy pvp
|
||
AiPlayerbot.RandomClassSpecProb.6.6 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.6.6 = 6
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# SHAMAN
|
||
#
|
||
#
|
||
|
||
# ele pve
|
||
AiPlayerbot.RandomClassSpecProb.7.0 = 33
|
||
AiPlayerbot.RandomClassSpecIndex.7.0 = 0
|
||
# enh pve
|
||
AiPlayerbot.RandomClassSpecProb.7.1 = 33
|
||
AiPlayerbot.RandomClassSpecIndex.7.1 = 1
|
||
# resto pve
|
||
AiPlayerbot.RandomClassSpecProb.7.2 = 33
|
||
AiPlayerbot.RandomClassSpecIndex.7.2 = 2
|
||
# ele pvp
|
||
AiPlayerbot.RandomClassSpecProb.7.3 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.7.3 = 3
|
||
# enh pvp
|
||
AiPlayerbot.RandomClassSpecProb.7.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.7.4 = 4
|
||
# resto pvp
|
||
AiPlayerbot.RandomClassSpecProb.7.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.7.5 = 5
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# MAGE
|
||
#
|
||
#
|
||
|
||
# arcane pve
|
||
AiPlayerbot.RandomClassSpecProb.8.0 = 30
|
||
AiPlayerbot.RandomClassSpecIndex.8.0 = 0
|
||
# fire pve
|
||
AiPlayerbot.RandomClassSpecProb.8.1 = 30
|
||
AiPlayerbot.RandomClassSpecIndex.8.1 = 1
|
||
# frost pve
|
||
AiPlayerbot.RandomClassSpecProb.8.2 = 40
|
||
AiPlayerbot.RandomClassSpecIndex.8.2 = 2
|
||
# frostfire pve
|
||
AiPlayerbot.RandomClassSpecProb.8.3 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.8.3 = 3
|
||
# arcane pvp
|
||
AiPlayerbot.RandomClassSpecProb.8.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.8.4 = 4
|
||
# fire pvp
|
||
AiPlayerbot.RandomClassSpecProb.8.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.8.5 = 5
|
||
# frost pvp
|
||
AiPlayerbot.RandomClassSpecProb.8.6 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.8.6 = 6
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# WARLOCK
|
||
#
|
||
#
|
||
|
||
# affli pve
|
||
AiPlayerbot.RandomClassSpecProb.9.0 = 33
|
||
AiPlayerbot.RandomClassSpecIndex.9.0 = 0
|
||
# demo pve
|
||
AiPlayerbot.RandomClassSpecProb.9.1 = 34
|
||
AiPlayerbot.RandomClassSpecIndex.9.1 = 1
|
||
# destro pve
|
||
AiPlayerbot.RandomClassSpecProb.9.2 = 33
|
||
AiPlayerbot.RandomClassSpecIndex.9.2 = 2
|
||
# affli pvp
|
||
AiPlayerbot.RandomClassSpecProb.9.3 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.9.3 = 3
|
||
# demo pvp
|
||
AiPlayerbot.RandomClassSpecProb.9.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.9.4 = 4
|
||
# destro pvp
|
||
AiPlayerbot.RandomClassSpecProb.9.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.9.5 = 5
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# DRUID
|
||
#
|
||
#
|
||
|
||
# balance pve
|
||
AiPlayerbot.RandomClassSpecProb.11.0 = 20
|
||
AiPlayerbot.RandomClassSpecIndex.11.0 = 0
|
||
# bear pve
|
||
AiPlayerbot.RandomClassSpecProb.11.1 = 25
|
||
AiPlayerbot.RandomClassSpecIndex.11.1 = 1
|
||
# resto pve
|
||
AiPlayerbot.RandomClassSpecProb.11.2 = 35
|
||
AiPlayerbot.RandomClassSpecIndex.11.2 = 2
|
||
# cat pve
|
||
AiPlayerbot.RandomClassSpecProb.11.3 = 20
|
||
AiPlayerbot.RandomClassSpecIndex.11.3 = 3
|
||
# balance pvp
|
||
AiPlayerbot.RandomClassSpecProb.11.4 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.11.4 = 4
|
||
# cat pvp
|
||
AiPlayerbot.RandomClassSpecProb.11.5 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.11.5 = 5
|
||
# resto pvp
|
||
AiPlayerbot.RandomClassSpecProb.11.6 = 0
|
||
AiPlayerbot.RandomClassSpecIndex.11.6 = 6
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
###################################
|
||
# #
|
||
# RAIDS #
|
||
# #
|
||
###################################
|
||
|
||
####################################################################################################
|
||
#
|
||
#
|
||
#
|
||
|
||
# Enable buffs in ICC to make Heroic easier and more casual. Default is 1.
|
||
# 30% more damage, 40% damage reduction (tank bots), increased all resistances, reduced threat for
|
||
# non tank bots, increased threat for tank bots.
|
||
# Buffs will be applied on LDW, PP, Sindragosa and Lich King.
|
||
AiPlayerbot.EnableICCBuffs = 1
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
###################################
|
||
# #
|
||
# PLAYERBOTS SYSTEM SETTINGS #
|
||
# #
|
||
###################################
|
||
|
||
####################################################################################################
|
||
# DATABASE & CONNECTIONS
|
||
#
|
||
#
|
||
|
||
# PlayerbotsDatabaseInfo
|
||
# Description: Database connection settings for the playerbots server.
|
||
# Example: "hostname;port;username;password;database"
|
||
# ".;somenumber;username;password;database" - (Use named pipes on Windows
|
||
# "enable-named-pipe" to [mysqld]
|
||
# section my.ini)
|
||
# ".;/path/to/unix_socket;username;password;database" - (use Unix sockets on
|
||
# Unix/Linux)
|
||
# Default: "127.0.0.1;3306;acore;acore;acore_playerbots" - (PlayerbotDatabaseInfo)
|
||
|
||
PlayerbotsDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_playerbots"
|
||
|
||
#
|
||
# PlayerbotsDatabase.WorkerThreads
|
||
# Description: The amount of worker threads spawned to handle asynchronous (delayed) MySQL
|
||
# statements. Each worker thread is mirrored with its own connection to the
|
||
# MySQL server and their own thread on the MySQL server.
|
||
# Default: 1 - (PlayerbotsDatabase.WorkerThreads)
|
||
|
||
PlayerbotsDatabase.WorkerThreads = 1
|
||
|
||
#
|
||
# PlayerbotsDatabase.SynchThreads
|
||
# Description: The amount of MySQL connections spawned to handle.
|
||
# Default: 1 - (PlayerbotDatabase.WorkerThreads)
|
||
|
||
PlayerbotsDatabase.SynchThreads = 1
|
||
|
||
# Playerbot.Updates.EnableDatabases
|
||
# Description: Determined if updates system work with playerbots database.
|
||
#
|
||
# Default: 1 - (Enabled)
|
||
# 0 - (Disabled)
|
||
|
||
Playerbots.Updates.EnableDatabases = 1
|
||
|
||
# Command server port, 0 - disabled
|
||
AiPlayerbot.CommandServerPort = 8888
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# DEBUG SWITCHES
|
||
#
|
||
#
|
||
|
||
AiPlayerbot.SpellDump = 0
|
||
AiPlayerbot.LogInGroupOnly = 1
|
||
AiPlayerbot.LogValuesPerTick = 0
|
||
AiPlayerbot.RandomChangeMultiplier = 1
|
||
|
||
# Tell which spell is avoiding (experimental)
|
||
# Default: 0 (disabled)
|
||
AiPlayerbot.TellWhenAvoidAoe = 0
|
||
|
||
# Enable/Disable performance monitor
|
||
AiPlayerbot.PerfMonEnabled = 0
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# CHAT SETTINGS
|
||
#
|
||
#
|
||
|
||
# Prefix for bot chat commands (e.g., follow, stay)
|
||
AiPlayerbot.CommandPrefix = ""
|
||
|
||
# Separator for bot chat commands
|
||
AiPlayerbot.CommandSeparator = "\\\\"
|
||
|
||
# Enable automatic item count/trade trigger when a chat message contains
|
||
# item-related keywords. When enabled (1), mentioning items in chat
|
||
# (e.g. "food", "potion", "ammo") will automatically show inventory and
|
||
# open a trade window with the bot. Explicit "c" and "t" commands still
|
||
# work regardless of this setting.
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.EnableAutoTradeOnItemMention = 1
|
||
|
||
# Enable bots talking (say / yell / general chatting / lfg)
|
||
AiPlayerbot.RandomBotTalk = 1
|
||
# Enable bots emoting
|
||
AiPlayerbot.RandomBotEmote = 0
|
||
# Enable randombots suggesting dungeons in chat
|
||
AiPlayerbot.RandomBotSuggestDungeons = 1
|
||
# Bots greet players when invited
|
||
AiPlayerbot.EnableGreet = 0
|
||
# Chance to reply to toxic links with toxic links (0-100)
|
||
AiPlayerbot.ToxicLinksRepliesChance = 30
|
||
# Chance to reply to Thunderfury with Thunderfury (0-100)
|
||
AiPlayerbot.ThunderfuryRepliesChance = 40
|
||
# Enable bots chatting in guild about certain events
|
||
AIPlayerbot.GuildFeedback = 1
|
||
# Chance bots will chat in guild about certain events (int) (0-100)
|
||
AiPlayerbot.GuildRepliesRate = 100
|
||
# Bots without a master will say their lines
|
||
AiPlayerbot.RandomBotSayWithoutMaster = 0
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# Broadcast rates
|
||
#
|
||
#
|
||
|
||
# Enable/disable broadcasts globally
|
||
# Default: 1 (enabled)
|
||
AiPlayerbot.EnableBroadcasts = 1
|
||
#
|
||
# All broadcast chances should be in range 0-30000
|
||
# Value of 0 will disable this particular broadcast
|
||
# Setting value to 30000 does not guarantee the broadcast, as there are some internal randoms as well
|
||
#
|
||
# Setting channel broadcast chance to 0, will re-route most broadcasts to other available channels
|
||
# Setting all channel broadcasts to 0 will disable most broadcasts
|
||
AiPlayerbot.BroadcastToGuildGlobalChance = 30000
|
||
AiPlayerbot.BroadcastToWorldGlobalChance = 30000
|
||
AiPlayerbot.BroadcastToGeneralGlobalChance = 30000
|
||
AiPlayerbot.BroadcastToTradeGlobalChance = 30000
|
||
AiPlayerbot.BroadcastToLFGGlobalChance = 30000
|
||
AiPlayerbot.BroadcastToLocalDefenseGlobalChance = 30000
|
||
AiPlayerbot.BroadcastToWorldDefenseGlobalChance = 30000
|
||
AiPlayerbot.BroadcastToGuildRecruitmentGlobalChance = 30000
|
||
#
|
||
# Individual settings
|
||
# Setting one of these to 0 will disable the particular broadcast
|
||
AiPlayerbot.BroadcastChanceLootingItemPoor = 30
|
||
AiPlayerbot.BroadcastChanceLootingItemNormal = 150
|
||
AiPlayerbot.BroadcastChanceLootingItemUncommon = 10000
|
||
AiPlayerbot.BroadcastChanceLootingItemRare = 20000
|
||
AiPlayerbot.BroadcastChanceLootingItemEpic = 30000
|
||
AiPlayerbot.BroadcastChanceLootingItemLegendary = 30000
|
||
AiPlayerbot.BroadcastChanceLootingItemArtifact = 30000
|
||
#
|
||
AiPlayerbot.BroadcastChanceQuestAccepted = 6000
|
||
AiPlayerbot.BroadcastChanceQuestUpdateObjectiveCompleted = 300
|
||
AiPlayerbot.BroadcastChanceQuestUpdateObjectiveProgress = 300
|
||
AiPlayerbot.BroadcastChanceQuestUpdateFailedTimer = 300
|
||
AiPlayerbot.BroadcastChanceQuestUpdateComplete = 1000
|
||
AiPlayerbot.BroadcastChanceQuestTurnedIn = 10000
|
||
#
|
||
AiPlayerbot.BroadcastChanceKillNormal = 30
|
||
AiPlayerbot.BroadcastChanceKillElite = 300
|
||
AiPlayerbot.BroadcastChanceKillRareelite = 3000
|
||
AiPlayerbot.BroadcastChanceKillWorldboss = 20000
|
||
AiPlayerbot.BroadcastChanceKillRare = 10000
|
||
AiPlayerbot.BroadcastChanceKillUnknown = 100
|
||
AiPlayerbot.BroadcastChanceKillPet = 10
|
||
AiPlayerbot.BroadcastChanceKillPlayer = 30
|
||
#
|
||
AiPlayerbot.BroadcastChanceLevelupGeneric = 20000
|
||
AiPlayerbot.BroadcastChanceLevelupTenX = 30000
|
||
AiPlayerbot.BroadcastChanceLevelupMaxLevel = 30000
|
||
#
|
||
AiPlayerbot.BroadcastChanceSuggestInstance = 5000
|
||
AiPlayerbot.BroadcastChanceSuggestQuest = 10000
|
||
AiPlayerbot.BroadcastChanceSuggestGrindMaterials = 5000
|
||
AiPlayerbot.BroadcastChanceSuggestGrindReputation = 5000
|
||
AiPlayerbot.BroadcastChanceSuggestSell = 300
|
||
AiPlayerbot.BroadcastChanceSuggestSomething = 30000
|
||
#
|
||
# Bots will say very rude things
|
||
AiPlayerbot.BroadcastChanceSuggestSomethingToxic = 0
|
||
#
|
||
# Specifically for "<word> [item link]"
|
||
AiPlayerbot.BroadcastChanceSuggestToxicLinks = 0
|
||
#
|
||
# Prefix is used as a word in "<word> [item link]"
|
||
AiPlayerbot.ToxicLinksPrefix = gnomes
|
||
#
|
||
# Chance to suggest Thunderfury
|
||
AiPlayerbot.BroadcastChanceSuggestThunderfury = 1
|
||
#
|
||
# Does not depend on global chance
|
||
AiPlayerbot.BroadcastChanceGuildManagement = 30000
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# LOGS
|
||
#
|
||
#
|
||
|
||
# Custom config to allow logfiles to be created.
|
||
# Example: AiPlayerbot.AllowedLogFiles = travelNodes.csv,travelPaths.csv,TravelNodeStore.h,bot_movement.csv,bot_location.csv
|
||
AiPlayerbot.AllowedLogFiles = ""
|
||
|
||
#
|
||
#
|
||
#
|
||
####################################################################################################
|
||
|
||
####################################################################################################
|
||
# A list of gameObject GUID's that are not allowed for bots to interact with.
|
||
#
|
||
AiPlayerbot.DisallowedGameObjects = 176213,17155,2656,74448,19020,3719,3658,3705,3706,105579,75293,2857,179490,141596,160836,160845,179516,176224,181085,176112,128308,128403,165739,165738,175245,175970,176325,176327,123329,2560
|
||
#
|
||
# List of GUID's:
|
||
# QuestItems:
|
||
# 176213 = Blood of Heroes, 17155 = Defias Gunpowder, 2656 = Waterlogged Envelope, 123329 = Baelogs Chest, 2560 = Half-Buried Bottle
|
||
# Chests:
|
||
# Large Solid Chest = 74448, Box of Assorted Parts = 19020, Food Crate = 3719, Water Barrel = 3658, Barrel of Milk = 3705, Barrel of sweet Nectar = 3706, Tattered Chest = 105579, Large bettered Chest = 75293, Solid Chest = 2857, Battered Foodlocker = 179490, Witch Doctor's Chest = 141596, Relic Coffer = 160836, Dark Coffer = 160845, Fengus's Chest = 179516, Supply Crate = 176224/181085, Malor's Strongbox = 176112
|
||
# Other:
|
||
# Shallow Grave (Zul'Farrak) = 128308/128403, Grim Guzzler Boar (Blackrock Depths) = 165739, Dark Iron Ale Mug (Blackrock Depths) = 165738, Father Flame (Blackrock Spire) = 175245, Unforged Runic Breastplate (Blackrock Spire) = 175970, Blacksmithing Plans (Stratholme) = 176325/176327
|
||
# Feel free to edit and help to complete.
|
||
#
|
||
####################################################################################################
|
||
|
||
##############################################
|
||
# Deprecated Settings (yet still in use) #
|
||
##############################################
|
||
|
||
# Log on all randombots on start
|
||
AiPlayerbot.RandomBotLoginAtStartup = 1
|
||
|
||
# Guild Task system
|
||
AiPlayerbot.EnableGuildTasks = 0
|
||
|
||
# Enable dungeon suggestions in lower case randomly
|
||
AiPlayerbot.SuggestDungeonsInLowerCaseRandomly = 0
|
||
|
||
# Chance bot chooses RPG (Teleport to random camp for their level) instead of grinding
|
||
AiPlayerbot.RandomBotRpgChance = 0.20
|
||
|
||
# Set randombots movement speed to walking anywhere
|
||
AiPlayerbot.RandombotsWalkingRPG = 0
|
||
|
||
# Set randombots movement speed to walking only inside buildings
|
||
AiPlayerbot.RandombotsWalkingRPG.InDoors = 0
|
||
|
||
# Premade spell to avoid (undetected spells)
|
||
# spellid-radius, ...
|
||
AiPlayerbot.PremadeAvoidAoe = 62234-4
|
||
|
||
AiPlayerbot.MinRandomBotsPriceChangeInterval = 7200
|
||
AiPlayerbot.MaxRandomBotsPriceChangeInterval = 172800
|
||
AiPlayerbot.MinRandomBotChangeStrategyTime = 180
|
||
AiPlayerbot.MaxRandomBotChangeStrategyTime = 720
|
||
|
||
# How often tasks are changed
|
||
AiPlayerbot.MinGuildTaskChangeTime = 172800
|
||
AiPlayerbot.MaxGuildTaskChangeTime = 432000
|
||
|
||
# Mail spam interval
|
||
AiPlayerbot.MinGuildTaskAdvertisementTime = 300
|
||
AiPlayerbot.MaxGuildTaskAdvertisementTime = 28800
|
||
|
||
# Delay before reward is sent
|
||
AiPlayerbot.MinGuildTaskRewardTime = 300
|
||
AiPlayerbot.MaxGuildTaskRewardTime = 3600
|
||
|
||
# Cleanup of guild tasks interval
|
||
AiPlayerbot.GuildTaskAdvertCleanupTime = 300
|
||
|
||
# Specify max distance between victim and bot when creating guild kill task
|
||
AiPlayerbot.GuildTaskKillTaskDistance = 200
|
||
|
||
# Distance margin for facade calculations
|
||
AiPlayerbot.TargetPosRecalcDistance = 0.1
|
||
|
||
# Allow bots to be summoned near innkeepers
|
||
AiPlayerbot.SummonAtInnkeepersEnabled = 1 |