Compare commits

..

9 Commits

Author SHA1 Message Date
Crow
82b5c7538e
Rewrite Gruul's Lair Strategies (#2473)
<!--
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 -->

Well, this is what I was doing while I let AI do the buff announcements
PR...

GL was the first strategy I wrote alone (Revision started Karazhan), and
it sucks. Since AC has now fixed Olm to actually chase and Kiggler to no
longer move to within his Arcane Explosion distance, it was a good time
to redo things. Overall, the code should be much simpler and better for
performance.

I also tweaked several strategies. My raid is close to expansion BiS now
so I tested at 20/20 damage/healing IP nerfs. One shot both, and overall
the bot coordination is a lot smoother than I remember when I was
actually running these raids.

Some stuff is still not great, like
GruulTheDragonkillerSpreadRangedAction() is overdone for sure, but I've
spent all the time I'm willing to on this one. I don't want this to
become a longer project.

## 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.
- Describe the **processing cost** when this logic executes across many
bots.

Same structure as before. Improved commonly used methods based on
experience since I did the original strategy (e.g., how to do tank
movement or spread bots), threw out some super complicated, bulky
methods in favor of much simpler ones that work better anyway, yadda
yadda.

## 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.
-->

Go fight HKM and Gruul. For HKM, bring three tanks, a mage, and a
boomin. For Gruul, bring an alarm clock.

## 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**)



- Does this change modify default bot behavior?
    - - [x] No
    - - [ ] Yes (**explain why**)



- Does this change add new decision branches or increase maintenance
complexity?
    - - [x] No
    - - [ ] Yes (**explain below**)



## 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?
- - [x] No
- - [ ] 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.
-->



<!--
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).

## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->
2026-06-19 16:02:43 -07:00
Crow
fffbf65738
Flag Carriers and Spirits Don't Eat or Drink (#2487)
<!--
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 -->

I got the Save the Day achievement in WSG because the flag carrier I was
chasing was way out of reach but decided to sit down right in front of
the flag cap point to have a drink. Flag carriers have one job to do,
and they should never stop to eat or drink.

Also, Spirits of Redemption drink, and that's just weird. Stop it.

## 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.
- Describe the **processing cost** when this logic executes across many
bots.

I added exclusions from EatAction::isPossible and
DrinkAction::isPossible for bots that have any of the WSG or EoS flag
auras. I also changed the check for Druid shapeshift aura strings into a
helper that checks GetShapeshiftForm, including Spirit of Redemption.

FWIW, I don't understand why Bears and Cats should not be allowed to eat
or drink, but I preserved those exclusions since they existed before and
I don't know if there is a good reason for it.

Changes to RogueActions are just to align the constant names for the
flag auras with those used in AC.

## 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.
-->

Easiest way is to enter a BG and use .damage on a flag carrier (easier
to do your teammate) to put them at low health. Before, they would sit
down and drink if out of combat. Now, they will not.

## 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?
    - - [ ] No, not at all
    - - [x] Minimal impact (**explain below**)
    - - [ ] Moderate impact (**explain below**)

These checks should cost virtually nothing, and I wouldn't be surprised
if overall the performance load is very slightly lighter by using
GetShapeshiftForm instead of the string-based lookups for aura names.

- Does this change modify default bot behavior?
    - - [ ] No
    - - [x] Yes (**explain why**)

Because default bots are idiots.

- Does this change add new decision branches or increase maintenance
complexity?
    - - [x] No
    - - [ ] Yes (**explain below**)



## 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?
- - [x] No
- - [ ] 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.
-->



<!--
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).

## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->
2026-06-19 15:35:22 -07:00
Crow
862b16cf89
Immune targets =/= possible targets (#2486)
<!--
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 -->

This is mainly to address the issue of bots continuing to attack Mages
with Ice Block and Paladins with Divine Shield. I made the actual check
a little broader to capture all cases of when a target is both physical
and magical immune.

## 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.
- Describe the **processing cost** when this logic executes across many
bots.

Just added immunity checks to AttackersValue::IsPossibleTarget()

## 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.
-->

The easiest way is to play a Mage or a Paladin and go zerg into the
opposing team, then put up Ice Block/Divine Shield.

## 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?
    - - [ ] No, not at all
    - - [x] Minimal impact (**explain below**)
    - - [ ] Moderate impact (**explain below**)

This is a new check when determining possible targets, but it should be
very cheap.

- Does this change modify default bot behavior?
    - - [ ] No
    - - [x] Yes (**explain why**)

Default bot behavior is idiotic as they stick to immune targets like
glue.

- Does this change add new decision branches or increase maintenance
complexity?
    - - [x] No
    - - [ ] Yes (**explain below**)



## 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.
-->

I wanted to capture more than just Ice Block and Divine Shield (which
would have been simple aura checks) so I had DeepSeek *shudder* look at
the spell flags.

<!--
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).

## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->
2026-06-19 15:35:11 -07:00
avirar
48f588d37d
Fix disenchant skill check causing bots to pass on usable loot (#2478)
<!--
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 -->

When a bot has the Enchanting skill but its level is insufficient to
disenchant an item, the old code returned `ITEM_USAGE_NONE` immediately.
This caused the bot to pass on loot rolls for items it could have used
for other purposes (equip, quest turn-in, crafting reagents, guild
tasks) because the function never reached those downstream checks.

The fix combines the skill check and binding check into a single
positive condition: the bot only returns `ITEM_USAGE_DISENCHANT` when it
is both skilled enough and the binding allows it. Otherwise, execution
falls through to the remaining item usage evaluations as intended.

## 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.
- Describe the **processing cost** when this logic executes across many
bots.

- **Minimum logic:** Replace two separate guards (one early-return
`NONE`, one positive `DISENCHANT`) with a single combined `if` that
returns `DISENCHANT` only when both conditions are met. No new branches
— one fewer than before.
- **Processing cost:** Identical. The same two comparisons execute once
per disenchant-eligible item evaluation. No change to per-bot or
per-tick cost.

## 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.
-->

1. Spawn a bot with Enchanting skill at a low level (e.g. 1/75).
2. Loot or roll on an armor/weapon item with `RequiredDisenchantSkill`
higher than the bot's skill (e.g. a level 50 blue with required skill
225).
3. **Before:** The bot returns `ITEM_USAGE_NONE` and passes on the item,
even if it could equip it or use it for a quest.
4. **After:** The bot correctly evaluates remaining usages (equip,
quest, etc.) and rolls Need/Greed appropriately.

## 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**)

Same number of comparisons, one fewer early-return path.

- Does this change modify default bot behavior?
    - - [ ] No
    - - [x] Yes (**explain why**)

Bots with insufficient enchanting skill will now correctly consider
non-disenchant uses for items they previously passed on entirely.

- Does this change add new decision branches or increase maintenance
complexity?
    - - [x] No
    - - [ ] Yes (**explain below**)

Reduces branches from two `if` statements to one.

## 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**)

AI was used to refactor the two-condition guard into a single combined
condition. The logic was reviewed and the behavioural difference
(fall-through vs early return) was verified manually.

<!--
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).

## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->

The root cause was that `return ITEM_USAGE_NONE` on the skill check
short-circuited the entire `Calculate()` function, skipping all
downstream item usage evaluations. The fix simply lets execution
continue past the disenchant block when disenchanting isn't viable.

Co-authored-by: avirar <avirar@users.noreply.github.com>
2026-06-19 15:35:03 -07:00
Crow
1fe0d6ed90
Fix header guard naming (#2476)
<!--
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 -->

1. Fix the names of many header guards
2. Add missing header guards to three files
3. Change pragma once to traditional ifndef for consistency
4. Fix misspelling of "PassTroughStrategy"

## 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.
- Describe the **processing cost** when this logic executes across many
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.
-->



## 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**)



- Does this change modify default bot behavior?
    - - [x] No
    - - [ ] Yes (**explain why**)



- Does this change add new decision branches or increase maintenance
complexity?
    - - [x] No
    - - [ ] Yes (**explain below**)



## 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.
-->

I had Raptor Mini do all the changes, which I read over.

<!--
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).

## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->

Ideally I think multiple words in headers should be broken up by
underscores for readability, but I can't change that one with a simple
CTRL+F so I think I'm going to leave it as is.
2026-06-19 15:34:52 -07:00
dillyns
9b9cee8d0d
Add Death Talon Wyrmguard Strat to BWL (#2457)
<!--
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 -->
Adds strategy for ranged and tank bots when fighting Death Talon
Wyrmguards.
Ranged will stay 16 yards away so as not to get hit by war stomp.
Tanks that are actively tanking at least one wyrmguard will move away
from other wyrmguards not they are not tanking.

The main issue I'm still having is healer positioning, sometimes the
tanks will outrange the healers in their attempt to stay away from
eachother, but imo the fight is already alot smoother.


## 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.
- Describe the **processing cost** when this logic executes across many
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.
-->
Go to BWL and pull the Wyrmguard 3 packs.
Ranged should stay away from all Wyrmguards, and tanks should attempt to
spread out the wyrmguards.
I still split the pull between tanks using rti targets and pull back,
since the tanks done actively pull mobs off of eachother.


## 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**)



- Does this change modify default bot behavior?
    - - [x] No
    - - [ ] Yes (**explain why**)



- Does this change add new decision branches or increase maintenance
complexity?
    - - [x] No
    - - [ ] Yes (**explain below**)



## 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.
-->
Claude was used to generate the tank actions that checks for nearby
untanked wyrmguards. I have reviewed and refined claude output
afterwards.


<!--
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).

## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->

---------

Co-authored-by: Keleborn <22352763+Celandriel@users.noreply.github.com>
2026-06-19 15:34:43 -07:00
NoxMax
a8586c3db3
Quests: AutoLearnQuestSpells now enabled as default (#2455)
<!--
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 -->
There's really no good reason to have it disabled as default. Let them
have their class quest spells on levelup.


## 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.
- Describe the **processing cost** when this logic executes across many
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.
-->



## 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**)



- Does this change modify default bot behavior?
    - - [ ] No
    - - [x] Yes (**explain why**)
They learn their class quest spells by default now.


- Does this change add new decision branches or increase maintenance
complexity?
    - - [x] No
    - - [ ] Yes (**explain below**)



## 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?
- - [x] No
- - [ ] 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.
-->



<!--
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).

## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->
2026-06-19 15:34:31 -07:00
ThePenguinMan96
14f444eec5
Druid Update Hotfix (#2454)
<!--
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 -->

Hello playerbots community! Through testing and feedback, two issues
have been brought to my attention with the druid update:

1. **The blanketing strategy is messing with the healer dps/healer
should attack function**, as outlined in issue #2428 . It's also clunky
in small groups/solo play. I have decided to remove the blanketing
strategy from the list of default resto strategies. It is now an
optional strategy only, enabled on resto druid by typing "co
+blanketing" for those difficult healing fights.

2. **Prowl both existing in the combat strategy (catdruidstrategy) and
noncombatstrategy has proven to be taxing/higher cpu usage than I would
like** - @brighton-chi identified that prowl was high on the pmon
output, and I confirmed locally that it was quite taxing. To fix this, I
tested this by removing the prowl trigger/action from the non-combat
strategy, and the numbers went down significantly. It's because it was
constantly scanning for targets while not in combat, similar to how the
pvp strategy does (not enabled by default, very taxing). Most rndbots
aren't in combat, so this was scanning on all rndbots that were feral
(cat) while out of combat. Now, it being only in the combat strategy is
appropriate - the trigger returns early, and doesn't even scan if the
bot is in combat. This is the prowl trigger:

Bot is not already prowling and not in combat
Bot has the Prowl spell and it's off cooldown
A valid target exists within engagement range (checks enemy player →
grind target → dps target in priority order)
Distance check: 30y base, −10y if target has a victim, −10y more if
target is also moving (floor 10y), +15y in BG or Arena

After I made this change locally, I tested it, and the only difference
is that the cat will no longer go into prowl when outside of combat
(walking around with master, unengaged to enemy target). It will still
go into prowl when told to attack a target, or dps assist. We could
potentially look at adding this back in, in a different way, when pvp
becomes more of a focus.

## 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.
- Describe the **processing cost** when this logic executes across many
bots.

This reduces the processing cost of prowl and the blanketing strategy
quite a bit, while still being functional in the situations that need
those abilities/strategy.

## 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.
-->



## 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**)

It reduces processing costs.

- Does this change modify default bot behavior?
    - - [ ] No
    - - [x] Yes (**explain why**)

The cat druid will no longer preemptively go into prowl before the enemy
is set to be attacked. It was cool to see the cat go into prowl when
getting close to a mob, but there was a lot of processing cost with this
outside of combat, so it's being shelved.

- Does this change add new decision branches or increase maintenance
complexity?
    - - [x] No
    - - [ ] Yes (**explain below**)



## 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.
-->


<!--
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).

## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->
2026-06-19 15:34:20 -07:00
Keleborn
e5f64e68d4
Required update for core (#2492)
<!--
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 -->
CHanges the ID and quest action packets required by core update commits.


## 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.
- Describe the **processing cost** when this logic executes across many
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.
-->



## 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**)



- Does this change modify default bot behavior?
    - - [x] No
    - - [ ] Yes (**explain why**)



- Does this change add new decision branches or increase maintenance
complexity?
    - - [x] No
    - - [ ] Yes (**explain below**)



## 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.
-->



<!--
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).

## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->
2026-06-19 15:31:20 -07:00
730 changed files with 2513 additions and 2276 deletions

View File

@ -980,8 +980,8 @@ AiPlayerbot.RandomBotQuestItems = "5175,5176,5177,5178,6948,11000,12382,13704,16
#
# Randombots automatically learn class quest reward spells on levelup
# Default: 0 (disabled)
AiPlayerbot.AutoLearnQuestSpells = 0
# Default: 1 (enabled)
AiPlayerbot.AutoLearnQuestSpells = 1
# Randombots automatically learn trainable spells on levelup
# Default: 1 (enabled)

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_ACTIONCONTEXT_H
#define _PLAYERBOT_ACTIONCONTEXT_H
#ifndef PLAYERBOTS_ACTIONCONTEXT_H
#define PLAYERBOTS_ACTIONCONTEXT_H
#include "AddLootAction.h"
#include "AttackAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_ACCEPTBATTLEGROUNDINVITATIONACTION_H
#define _PLAYERBOT_ACCEPTBATTLEGROUNDINVITATIONACTION_H
#ifndef PLAYERBOTS_ACCEPTBATTLEGROUNDINVITATIONACTION_H
#define PLAYERBOTS_ACCEPTBATTLEGROUNDINVITATIONACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_ACCEPTDUELACTION_H
#define _PLAYERBOT_ACCEPTDUELACTION_H
#ifndef PLAYERBOTS_ACCEPTDUELACTION_H
#define PLAYERBOTS_ACCEPTDUELACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_ACCEPTINVITATIONACTION_H
#define _PLAYERBOT_ACCEPTINVITATIONACTION_H
#ifndef PLAYERBOTS_ACCEPTINVITATIONACTION_H
#define PLAYERBOTS_ACCEPTINVITATIONACTION_H
#include "Action.h"
#include "UseMeetingStoneAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_ACCEPTQUESTACTION_H
#define _PLAYERBOT_ACCEPTQUESTACTION_H
#ifndef PLAYERBOTS_ACCEPTQUESTACTION_H
#define PLAYERBOTS_ACCEPTQUESTACTION_H
#include "QuestAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_ACCEPTRESURRECTACTION_H
#define _PLAYERBOT_ACCEPTRESURRECTACTION_H
#ifndef PLAYERBOTS_ACCEPTRESURRECTACTION_H
#define PLAYERBOTS_ACCEPTRESURRECTACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_ADDLOOTACTION_H
#define _PLAYERBOT_ADDLOOTACTION_H
#ifndef PLAYERBOTS_ADDLOOTACTION_H
#define PLAYERBOTS_ADDLOOTACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_AREATRIGGERACTION_H
#define _PLAYERBOT_AREATRIGGERACTION_H
#ifndef PLAYERBOTS_AREATRIGGERACTION_H
#define PLAYERBOTS_AREATRIGGERACTION_H
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_ARENATEAMACTION_H
#define _PLAYERBOT_ARENATEAMACTION_H
#ifndef PLAYERBOTS_ARENATEAMACTIONS_H
#define PLAYERBOTS_ARENATEAMACTIONS_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_ATTACKACTION_H
#define _PLAYERBOT_ATTACKACTION_H
#ifndef PLAYERBOTS_ATTACKACTION_H
#define PLAYERBOTS_ATTACKACTION_H
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_AUTOTELEPORTFORLEVELACTION_H
#define _PLAYERBOT_AUTOTELEPORTFORLEVELACTION_H
#ifndef PLAYERBOTS_AUTOMAINTENANCEONLEVELUPACTION_H
#define PLAYERBOTS_AUTOMAINTENANCEONLEVELUPACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_BANKACTION_H
#define _PLAYERBOT_BANKACTION_H
#ifndef PLAYERBOTS_BANKACTION_H
#define PLAYERBOTS_BANKACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_BATTLEGROUNDJOINACTION_H
#define _PLAYERBOT_BATTLEGROUNDJOINACTION_H
#ifndef PLAYERBOTS_BATTLEGROUNDJOINACTION_H
#define PLAYERBOTS_BATTLEGROUNDJOINACTION_H
#include "Action.h"
#include "DBCEnums.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_BATTLEGROUNDTACTICSACTION_H
#define _PLAYERBOT_BATTLEGROUNDTACTICSACTION_H
#ifndef PLAYERBOTS_BATTLEGROUNDTACTICS_H
#define PLAYERBOTS_BATTLEGROUNDTACTICS_H
#include "BattlegroundAV.h"
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_BOSSAURAACTION_H
#define _PLAYERBOT_BOSSAURAACTION_H
#ifndef PLAYERBOTS_BOSSAURAACTIONS_H
#define PLAYERBOTS_BOSSAURAACTIONS_H
#include <string>

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_BUFFACTION_H
#define _PLAYERBOT_BUFFACTION_H
#ifndef PLAYERBOTS_BUFFACTION_H
#define PLAYERBOTS_BUFFACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_BUYACTION_H
#define _PLAYERBOT_BUYACTION_H
#ifndef PLAYERBOTS_BUYACTION_H
#define PLAYERBOTS_BUYACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CANCELCHANNELACTION_H
#define _PLAYERBOT_CANCELCHANNELACTION_H
#ifndef PLAYERBOTS_CANCELCHANNELACTION_H
#define PLAYERBOTS_CANCELCHANNELACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CASTCUSTOMSPELLACTION_H
#define _PLAYERBOT_CASTCUSTOMSPELLACTION_H
#ifndef PLAYERBOTS_CASTCUSTOMSPELLACTION_H
#define PLAYERBOTS_CASTCUSTOMSPELLACTION_H
#include "ListSpellsAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHANGECHATACTION_H
#define _PLAYERBOT_CHANGECHATACTION_H
#ifndef PLAYERBOTS_CHANGECHATACTION_H
#define PLAYERBOTS_CHANGECHATACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHANGESTRATEGYACTION_H
#define _PLAYERBOT_CHANGESTRATEGYACTION_H
#ifndef PLAYERBOTS_CHANGESTRATEGYACTION_H
#define PLAYERBOTS_CHANGESTRATEGYACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHANGETALENTSACTION_H
#define _PLAYERBOT_CHANGETALENTSACTION_H
#ifndef PLAYERBOTS_CHANGETALENTSACTION_H
#define PLAYERBOTS_CHANGETALENTSACTION_H
#include "Action.h"
#include "Talentspec.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHATSHORTCUTACTION_H
#define _PLAYERBOT_CHATSHORTCUTACTION_H
#ifndef PLAYERBOTS_CHATSHORTCUTACTIONS_H
#define PLAYERBOTS_CHATSHORTCUTACTIONS_H
#include "MovementActions.h"

View File

@ -3,6 +3,9 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef PLAYERBOTS_CHEATACTION_H
#define PLAYERBOTS_CHEATACTION_H
#include "Action.h"
class PlayerbotAI;
@ -21,3 +24,5 @@ private:
static std::string const GetCheatName(BotCheatMask cheatMask);
void ListCheats();
};
#endif

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHECKMAILACTION_H
#define _PLAYERBOT_CHECKMAILACTION_H
#ifndef PLAYERBOTS_CHECKMAILACTION_H
#define PLAYERBOTS_CHECKMAILACTION_H
#include "Action.h"
#include "DatabaseEnvFwd.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHECKMOUNTSTATEACTION_H
#define _PLAYERBOT_CHECKMOUNTSTATEACTION_H
#ifndef PLAYERBOTS_CHECKMOUNTSTATEACTION_H
#define PLAYERBOTS_CHECKMOUNTSTATEACTION_H
#include <unordered_map>
#include <vector>

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHECKVALUESACTION_H
#define _PLAYERBOT_CHECKVALUESACTION_H
#ifndef PLAYERBOTS_CHECKVALUESACTION_H
#define PLAYERBOTS_CHECKVALUESACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHOOSERPGTARGETACTION_H
#define _PLAYERBOT_CHOOSERPGTARGETACTION_H
#ifndef PLAYERBOTS_CHOOSERPGTARGETACTION_H
#define PLAYERBOTS_CHOOSERPGTARGETACTION_H
#include "ObjectGuid.h"
#include "RpgAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHOOSETARGETACTIONS_H
#define _PLAYERBOT_CHOOSETARGETACTIONS_H
#ifndef PLAYERBOTS_CHOOSETARGETACTIONS_H
#define PLAYERBOTS_CHOOSETARGETACTIONS_H
#include "AttackAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CHOOSETRAVELTARGETACTION_H
#define _PLAYERBOT_CHOOSETRAVELTARGETACTION_H
#ifndef PLAYERBOTS_CHOOSETRAVELTARGETACTION_H
#define PLAYERBOTS_CHOOSETRAVELTARGETACTION_H
#include "MovementActions.h"
#include "TravelMgr.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_COMBATACTIONS_H
#define _PLAYERBOT_COMBATACTIONS_H
#ifndef PLAYERBOTS_COMBATACTIONS_H
#define PLAYERBOTS_COMBATACTIONS_H
#include "ChangeStrategyAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_CUSTOMSTRATEGYEDITACTION_H
#define _PLAYERBOT_CUSTOMSTRATEGYEDITACTION_H
#ifndef PLAYERBOTS_CUSTOMSTRATEGYEDITACTION_H
#define PLAYERBOTS_CUSTOMSTRATEGYEDITACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_DEBUGACTION_H
#define _PLAYERBOT_DEBUGACTION_H
#ifndef PLAYERBOTS_DEBUGACTION_H
#define PLAYERBOTS_DEBUGACTION_H
#include "Action.h"
#include "ObjectGuid.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_DELAYACTION_H
#define _PLAYERBOT_DELAYACTION_H
#ifndef PLAYERBOTS_DELAYACTION_H
#define PLAYERBOTS_DELAYACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_DESTROYITEMACTION_H
#define _PLAYERBOT_DESTROYITEMACTION_H
#ifndef PLAYERBOTS_DESTROYITEMACTION_H
#define PLAYERBOTS_DESTROYITEMACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_DROPQUESTACTION_H
#define _PLAYERBOT_DROPQUESTACTION_H
#ifndef PLAYERBOTS_DROPQUESTACTION_H
#define PLAYERBOTS_DROPQUESTACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_EMOTEACTION_H
#define _PLAYERBOT_EMOTEACTION_H
#ifndef PLAYERBOTS_EMOTEACTION_H
#define PLAYERBOTS_EMOTEACTION_H
#include <map>

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_EQUIPACTION_H
#define _PLAYERBOT_EQUIPACTION_H
#ifndef PLAYERBOTS_EQUIPACTION_H
#define PLAYERBOTS_EQUIPACTION_H
#include "ChatHelper.h"
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_EQUIPGLYPHSACTION_H
#define _PLAYERBOT_EQUIPGLYPHSACTION_H
#ifndef PLAYERBOTS_EQUIPGLYPHSACTION_H
#define PLAYERBOTS_EQUIPGLYPHSACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_FISHINGACTION_H
#define _PLAYERBOT_FISHINGACTION_H
#ifndef PLAYERBOTS_FISHINGACTION_H
#define PLAYERBOTS_FISHINGACTION_H
#include "Action.h"
#include "Event.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_FLAGACTION_H
#define _PLAYERBOT_FLAGACTION_H
#ifndef PLAYERBOTS_FLAGACTION_H
#define PLAYERBOTS_FLAGACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_FOLLOWACTIONS_H
#define _PLAYERBOT_FOLLOWACTIONS_H
#ifndef PLAYERBOTS_FOLLOWACTIONS_H
#define PLAYERBOTS_FOLLOWACTIONS_H
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GENERICACTIONS_H
#define _PLAYERBOT_GENERICACTIONS_H
#ifndef PLAYERBOTS_GENERICACTIONS_H
#define PLAYERBOTS_GENERICACTIONS_H
#include "AttackAction.h"
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GENERICSPELLACTIONS_H
#define _PLAYERBOT_GENERICSPELLACTIONS_H
#ifndef PLAYERBOTS_GENERICSPELLACTIONS_H
#define PLAYERBOTS_GENERICSPELLACTIONS_H
#include "Action.h"
#include "PlayerbotAI.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GIVEITEMACTION_H
#define _PLAYERBOT_GIVEITEMACTION_H
#ifndef PLAYERBOTS_GIVEITEMACTION_H
#define PLAYERBOTS_GIVEITEMACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GOACTION_H
#define _PLAYERBOT_GOACTION_H
#ifndef PLAYERBOTS_GOACTION_H
#define PLAYERBOTS_GOACTION_H
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GOSSIPHELLOACTION_H
#define _PLAYERBOT_GOSSIPHELLOACTION_H
#ifndef PLAYERBOTS_GOSSIPHELLOACTION_H
#define PLAYERBOTS_GOSSIPHELLOACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GREETACTION_H
#define _PLAYERBOT_GREETACTION_H
#ifndef PLAYERBOTS_GREETACTION_H
#define PLAYERBOTS_GREETACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GUILDACCEPTACTION_H
#define _PLAYERBOT_GUILDACCEPTACTION_H
#ifndef PLAYERBOTS_GUILDACCEPTACTION_H
#define PLAYERBOTS_GUILDACCEPTACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GUILDBANKACTION_H
#define _PLAYERBOT_GUILDBANKACTION_H
#ifndef PLAYERBOTS_GUILDBANKACTION_H
#define PLAYERBOTS_GUILDBANKACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GUILDCREATEACTION_H
#define _PLAYERBOT_GUILDCREATEACTION_H
#ifndef PLAYERBOTS_GUILDCREATEACTIONS_H
#define PLAYERBOTS_GUILDCREATEACTIONS_H
#include "ChooseTravelTargetAction.h"
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_GUILDMAMANEGEMENTACTION_H
#define _PLAYERBOT_GUILDMAMANEGEMENTACTION_H
#ifndef PLAYERBOTS_GUILDMANAGEMENTACTIONS_H
#define PLAYERBOTS_GUILDMANAGEMENTACTIONS_H
#include "Action.h"
#include "Opcodes.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_HELPACTION_H
#define _PLAYERBOT_HELPACTION_H
#ifndef PLAYERBOTS_HELPACTION_H
#define PLAYERBOTS_HELPACTION_H
#include "Action.h"
#include "NamedObjectContext.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_HIREACTION_H
#define _PLAYERBOT_HIREACTION_H
#ifndef PLAYERBOTS_HIREACTION_H
#define PLAYERBOTS_HIREACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_IMBUEACTION_H
#define _PLAYERBOT_IMBUEACTION_H
#ifndef PLAYERBOTS_IMBUEACTION_H
#define PLAYERBOTS_IMBUEACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_INVENTORYACTION_H
#define _PLAYERBOT_INVENTORYACTION_H
#ifndef PLAYERBOTS_INVENTORYACTION_H
#define PLAYERBOTS_INVENTORYACTION_H
#include "Action.h"
#include "ItemVisitors.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_INVENTORYCHANGEFAILUREACTION_H
#define _PLAYERBOT_INVENTORYCHANGEFAILUREACTION_H
#ifndef PLAYERBOTS_INVENTORYCHANGEFAILUREACTION_H
#define PLAYERBOTS_INVENTORYCHANGEFAILUREACTION_H
#include "Action.h"
#include "Item.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_INVITETOGROUPACTION_H
#define _PLAYERBOT_INVITETOGROUPACTION_H
#ifndef PLAYERBOTS_INVITETOGROUPACTION_H
#define PLAYERBOTS_INVITETOGROUPACTION_H
#include "Action.h"
#include "Player.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_LEAVEGROUPACTION_H
#define _PLAYERBOT_LEAVEGROUPACTION_H
#ifndef PLAYERBOTS_LEAVEGROUPACTION_H
#define PLAYERBOTS_LEAVEGROUPACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_LFGACTIONS_H
#define _PLAYERBOT_LFGACTIONS_H
#ifndef PLAYERBOTS_LFGACTIONS_H
#define PLAYERBOTS_LFGACTIONS_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_LISTQUESTSACTIONS_H
#define _PLAYERBOT_LISTQUESTSACTIONS_H
#ifndef PLAYERBOTS_LISTQUESTSACTIONS_H
#define PLAYERBOTS_LISTQUESTSACTIONS_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_LISTSPELLSACTION_H
#define _PLAYERBOT_LISTSPELLSACTION_H
#ifndef PLAYERBOTS_LISTSPELLSACTION_H
#define PLAYERBOTS_LISTSPELLSACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_LOGLEVELACTION_H
#define _PLAYERBOT_LOGLEVELACTION_H
#ifndef PLAYERBOTS_LOGLEVELACTION_H
#define PLAYERBOTS_LOGLEVELACTION_H
#include "Action.h"
#include "LogCommon.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_LOOTACTION_H
#define _PLAYERBOT_LOOTACTION_H
#ifndef PLAYERBOTS_LOOTACTION_H
#define PLAYERBOTS_LOOTACTION_H
#include "InventoryAction.h"
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_LOOTROLLACTION_H
#define _PLAYERBOT_LOOTROLLACTION_H
#ifndef PLAYERBOTS_LOOTROLLACTION_H
#define PLAYERBOTS_LOOTROLLACTION_H
#include "QueryItemUsageAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_LOOTSTRATEGYACTION_H
#define _PLAYERBOT_LOOTSTRATEGYACTION_H
#ifndef PLAYERBOTS_LOOTSTRATEGYACTION_H
#define PLAYERBOTS_LOOTSTRATEGYACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_MAILACTION_H
#define _PLAYERBOT_MAILACTION_H
#ifndef PLAYERBOTS_MAILACTION_H
#define PLAYERBOTS_MAILACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_MOVETORPGTARGETACTION_H
#define _PLAYERBOT_MOVETORPGTARGETACTION_H
#ifndef PLAYERBOTS_MOVETORPGTARGETACTION_H
#define PLAYERBOTS_MOVETORPGTARGETACTION_H
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_MOVETOTRAVELTARGETACTION_H
#define _PLAYERBOT_MOVETOTRAVELTARGETACTION_H
#ifndef PLAYERBOTS_MOVETOTRAVELTARGETACTION_H
#define PLAYERBOTS_MOVETOTRAVELTARGETACTION_H
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_MOVEMENTACTIONS_H
#define _PLAYERBOT_MOVEMENTACTIONS_H
#ifndef PLAYERBOTS_MOVEMENTACTIONS_H
#define PLAYERBOTS_MOVEMENTACTIONS_H
#include <cmath>

View File

@ -8,6 +8,31 @@
#include "Event.h"
#include "Playerbots.h"
namespace
{
constexpr uint32 BG_WS_SPELL_WARSONG_FLAG = 23333;
constexpr uint32 BG_WS_SPELL_SILVERWING_FLAG = 23335;
constexpr uint32 BG_EY_NETHERSTORM_FLAG_SPELL = 34976;
bool IsDisallowedShapeshiftForm(Player* bot)
{
if (bot->getClass() == CLASS_DRUID)
{
ShapeshiftForm form = bot->GetShapeshiftForm();
return form == FORM_TRAVEL || form == FORM_AQUA ||
form == FORM_FLIGHT || form == FORM_FLIGHT_EPIC ||
form == FORM_BEAR || form == FORM_DIREBEAR ||
form == FORM_CAT;
}
else if (bot->getClass() == CLASS_PRIEST)
{
return bot->GetShapeshiftForm() == FORM_SPIRITOFREDEMPTION;
}
return false;
}
}
bool DrinkAction::Execute(Event event)
{
if (botAI->HasCheat(BotCheatMask::food))
@ -55,10 +80,16 @@ bool DrinkAction::isUseful()
bool DrinkAction::isPossible()
{
return !bot->IsInCombat() && !bot->IsMounted() &&
!botAI->HasAnyAuraOf(GetTarget(), "dire bear form", "bear form", "cat form", "travel form", "aquatic form",
"flight form", "swift flight form", nullptr) &&
(botAI->HasCheat(BotCheatMask::food) || UseItemAction::isPossible());
if (bot->IsInCombat() || bot->IsMounted() || IsDisallowedShapeshiftForm(bot))
return false;
if (bot->HasAura(BG_WS_SPELL_WARSONG_FLAG) || bot->HasAura(BG_WS_SPELL_SILVERWING_FLAG) ||
bot->HasAura(BG_EY_NETHERSTORM_FLAG_SPELL))
{
return false;
}
return botAI->HasCheat(BotCheatMask::food) || UseItemAction::isPossible();
}
bool EatAction::Execute(Event event)
@ -104,8 +135,14 @@ bool EatAction::isUseful() { return UseItemAction::isUseful() && AI_VALUE2(uint8
bool EatAction::isPossible()
{
return !bot->IsInCombat() && !bot->IsMounted() &&
!botAI->HasAnyAuraOf(GetTarget(), "dire bear form", "bear form", "cat form", "travel form", "aquatic form",
"flight form", "swift flight form", nullptr) &&
(botAI->HasCheat(BotCheatMask::food) || UseItemAction::isPossible());
if (bot->IsInCombat() || bot->IsMounted() || IsDisallowedShapeshiftForm(bot))
return false;
if (bot->HasAura(BG_WS_SPELL_WARSONG_FLAG) || bot->HasAura(BG_WS_SPELL_SILVERWING_FLAG) ||
bot->HasAura(BG_EY_NETHERSTORM_FLAG_SPELL))
{
return false;
}
return botAI->HasCheat(BotCheatMask::food) || UseItemAction::isPossible();
}

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_NONCOMBATACTIONS_H
#define _PLAYERBOT_NONCOMBATACTIONS_H
#ifndef PLAYERBOTS_NONCOMBATACTIONS_H
#define PLAYERBOTS_NONCOMBATACTIONS_H
#include "UseItemAction.h"

View File

@ -3,8 +3,8 @@
* you may redistribute it and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_OPENITEMACTION_H
#define _PLAYERBOT_OPENITEMACTION_H
#ifndef PLAYERBOTS_OPENITEMACTION_H
#define PLAYERBOTS_OPENITEMACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_OUTFITACTION_H
#define _PLAYERBOT_OUTFITACTION_H
#ifndef PLAYERBOTS_OUTFITACTION_H
#define PLAYERBOTS_OUTFITACTION_H
#include "ChatHelper.h"
#include "EquipAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_PASSLEADERSHIPTOMASTERACTION_H
#define _PLAYERBOT_PASSLEADERSHIPTOMASTERACTION_H
#ifndef PLAYERBOTS_PASSLEADERSHIPTOMASTERACTION_H
#define PLAYERBOTS_PASSLEADERSHIPTOMASTERACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_PETITIONSIGNACTION_H
#define _PLAYERBOT_PETITIONSIGNACTION_H
#ifndef PLAYERBOTS_PETITIONSIGNACTION_H
#define PLAYERBOTS_PETITIONSIGNACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_PETSACTION_H
#define _PLAYERBOT_PETSACTION_H
#ifndef PLAYERBOTS_PETSACTION_H
#define PLAYERBOTS_PETSACTION_H
#include <string>

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_POSITIONACTION_H
#define _PLAYERBOT_POSITIONACTION_H
#ifndef PLAYERBOTS_POSITIONACTION_H
#define PLAYERBOTS_POSITIONACTION_H
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_PULLACTIONS_H
#define _PLAYERBOT_PULLACTIONS_H
#ifndef PLAYERBOTS_PULLACTIONS_H
#define PLAYERBOTS_PULLACTIONS_H
#include "GenericSpellActions.h"
#include "ReachTargetActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_QUERYITEMUSAGEACTION_H
#define _PLAYERBOT_QUERYITEMUSAGEACTION_H
#ifndef PLAYERBOTS_QUERYITEMUSAGEACTION_H
#define PLAYERBOTS_QUERYITEMUSAGEACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_QUERYQUESTACTION_H
#define _PLAYERBOT_QUERYQUESTACTION_H
#ifndef PLAYERBOTS_QUERYQUESTACTION_H
#define PLAYERBOTS_QUERYQUESTACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_QUESTACTION_H
#define _PLAYERBOT_QUESTACTION_H
#ifndef PLAYERBOTS_QUESTACTION_H
#define PLAYERBOTS_QUESTACTION_H
#include "Action.h"
#include "Object.h"

View File

@ -1,5 +1,6 @@
#include "QuestConfirmAcceptAction.h"
#include "QuestPackets.h"
#include "WorldPacket.h"
bool QuestConfirmAcceptAction::Execute(Event event)
@ -18,6 +19,8 @@ bool QuestConfirmAcceptAction::Execute(Event event)
std::ostringstream out;
out << "Quest: " << chat->FormatQuest(quest) << " confirm accept";
botAI->TellMaster(out);
bot->GetSession()->HandleQuestConfirmAccept(sendPacket);
WorldPackets::Quest::QuestConfirmAcceptClient confirmAccept(std::move(sendPacket));
confirmAccept.Read();
bot->GetSession()->HandleQuestConfirmAccept(confirmAccept);
return true;
}

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_QUESTCONFIRMACCEPTACTION_H
#define _PLAYERBOT_QUESTCONFIRMACCEPTACTION_H
#ifndef PLAYERBOTS_QUESTCONFIRMACCEPTACTION_H
#define PLAYERBOTS_QUESTCONFIRMACCEPTACTION_H
#include "AiObjectContext.h"
#include "Player.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_RANDOMBOTUPDATEACTION_H
#define _PLAYERBOT_RANDOMBOTUPDATEACTION_H
#ifndef PLAYERBOTS_RANDOMBOTUPDATEACTION_H
#define PLAYERBOTS_RANDOMBOTUPDATEACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_RANGEACTION_H
#define _PLAYERBOT_RANGEACTION_H
#ifndef PLAYERBOTS_RANGEACTION_H
#define PLAYERBOTS_RANGEACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_REACHTARGETACTIONS_H
#define _PLAYERBOT_REACHTARGETACTIONS_H
#ifndef PLAYERBOTS_REACHTARGETACTIONS_H
#define PLAYERBOTS_REACHTARGETACTIONS_H
#include "GenericSpellActions.h"
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_READYCHECKACTION_H
#define _PLAYERBOT_READYCHECKACTION_H
#ifndef PLAYERBOTS_READYCHECKACTION_H
#define PLAYERBOTS_READYCHECKACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef PLAYERBOT_RELEASESPIRITACTION_H
#define PLAYERBOT_RELEASESPIRITACTION_H
#ifndef PLAYERBOTS_RELEASESPIRITACTION_H
#define PLAYERBOTS_RELEASESPIRITACTION_H
#include "Action.h"
#include "ReviveFromCorpseAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_REMEMBERTAXIACTION_H
#define _PLAYERBOT_REMEMBERTAXIACTION_H
#ifndef PLAYERBOTS_REMEMBERTAXIACTION_H
#define PLAYERBOTS_REMEMBERTAXIACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_REMOVEAURAACTION_H
#define _PLAYERBOT_REMOVEAURAACTION_H
#ifndef PLAYERBOTS_REMOVEAURAACTION_H
#define PLAYERBOTS_REMOVEAURAACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_REPAIRALLACTION_H
#define _PLAYERBOT_REPAIRALLACTION_H
#ifndef PLAYERBOTS_REPAIRALLACTION_H
#define PLAYERBOTS_REPAIRALLACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_RESETAIACTION_H
#define _PLAYERBOT_RESETAIACTION_H
#ifndef PLAYERBOTS_RESETAIACTION_H
#define PLAYERBOTS_RESETAIACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_RESETINSTANCESACTION_H
#define _PLAYERBOT_RESETINSTANCESACTION_H
#ifndef PLAYERBOTS_RESETINSTANCESACTION_H
#define PLAYERBOTS_RESETINSTANCESACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_REVEALGATHERINGITEMACTION_H
#define _PLAYERBOT_REVEALGATHERINGITEMACTION_H
#ifndef PLAYERBOTS_REVEALGATHERINGITEMACTION_H
#define PLAYERBOTS_REVEALGATHERINGITEMACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_REVIVEFROMCORPSEACTION_H
#define _PLAYERBOT_REVIVEFROMCORPSEACTION_H
#ifndef PLAYERBOTS_REVIVEFROMCORPSEACTION_H
#define PLAYERBOTS_REVIVEFROMCORPSEACTION_H
#include "MovementActions.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_REWARDACTION_H
#define _PLAYERBOT_REWARDACTION_H
#ifndef PLAYERBOTS_REWARDACTION_H
#define PLAYERBOTS_REWARDACTION_H
#include "InventoryAction.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_RTIACTION_H
#define _PLAYERBOT_RTIACTION_H
#ifndef PLAYERBOTS_RTIACTION_H
#define PLAYERBOTS_RTIACTION_H
#include "Action.h"

View File

@ -3,8 +3,8 @@
* and/or modify it under version 3 of the License, or (at your option), any later version.
*/
#ifndef _PLAYERBOT_RTSCACTION_H
#define _PLAYERBOT_RTSCACTION_H
#ifndef PLAYERBOTS_RTSCACTION_H
#define PLAYERBOTS_RTSCACTION_H
#include "SeeSpellAction.h"

Some files were not shown because too many files have changed in this diff Show More