Commit Graph

30 Commits

Author SHA1 Message Date
Nicolas Lebacq
c9cc4324d3 NextAction refactoring to eliminate sentinel arrays and pointers (#1923)
<!--
> [!WARNING]
> **This is a DRAFT PR.**
> The structure is not definitive. The code might not be optimised yet.
It might not even start nor compile yet.
> **Don't panic.  It's going to be ok. 👌 We can make modifications, we
can fix things.** 😁
-->
# Description

This PR aims to refactor the NextAction declaration to achieve two
goals:

## Eliminate C-style sentinel arrays

Currently, a double pointer (`NextAction**`) approach is being used.
This an old pre-C++11 (< 2011) trick before `std::vector<>` became a
thing.
This approach is painful for developers because they constantly need to
declare their `NextAction` arrays as:
```cpp
NextAction::array(0, new NextAction("foo", 1.0f), nullptr)
```
Instead of:
```cpp
{ new NextAction("foo", 1.0f) }
```
The first argument of `NextAction::array` is actually a hack. It is used
to have a named argument so `va_args` can find the remaining arguments.
It is set to 0 everywhere but in fact does nothing. This is very
confusing to people unfamiliar with this antiquated syntax.
The last argument `nullptr` is what we call a sentinel. It's a `nullptr`
because `va_args` is looking for a `nullptr` to stop iterating. It's
also a hack and also leads to confusion.

## Eliminate unnecessary pointers for `NextAction`

Pointers can be used for several reasons, to cite a few:
- Indicate strong, absolute identity.
- Provide strong but transferable ownership (unlike references).
- When a null value is acceptable (`nullptr`).
- When copy is expensive.

`NextAction` meets none of these criteria:
- It has no identity because it is purely behavioural.
- It is never owned by anything as it is passed around and never fetched
from a registry.
- The only situations where it can be `nullptr` are errors that should
in fact throw an `std::invalid_argument` instead.
- They are extremely small objects that embark a single `std::string`
and a single `float`.

Pointers should be avoided when not strictly necessary because they can
quickly lead to undefined behaviour due to unhandled `nullptr`
situations. They also make the syntax heavier due to the necessity to
constantly check for `nullptr`. Finally, they aren't even good for
performance in that situation because shifting a pointer so many times
is likely more expensive than copying such a trivial object.

# End goal

The end goal is to declare `NextAction` arrays this way:
```cpp
{ NextAction("foo", 1.0f) }
```

> [!NOTE]
> Additional note: `NextAction` is nothing but a hacky proxy to an
`Action` constructor. This should eventually be reworked to use handles
instead of strings. This would make copying `NextAction` even cheaper
and remove the need for the extremely heavy stringly typed current
approach. Stringly typed entities are a known anti-pattern so we need to
move on from those.
2026-01-06 12:37:39 +01:00
kadeshar
85c7009fe1 Codestyle fix (#1797)
Warning:
Dont change this PR as draft to make it testable


DONT REVIEW UNTIL Codestyle C++ workflow dont pass
2025-11-05 21:10:17 +01:00
bash
0cc15411c1 license update (#1674) 2025-09-30 15:19:44 +02:00
Revision
fcb956ec1b Removed unnecessary spaces 2025-09-19 22:43:50 +02:00
Revision
ace813516d Replaced tabs with spaces 2025-09-19 21:00:09 +02:00
Alex Dcnh
e175eb1178 Paladin buff logic: Sanctuary+Kings synergy, role-aware targeting, safer Greater buffs (#1603)
* Paladin buff logic: Sanctuary+Kings synergy, role-aware targeting, safer Greater buffs

* Update PaladinActions.cpp

* Update PaladinActions.cpp

* All configs should be implement into PlayerbotAIConfig and sPlayerbotAIConfig used in code

* added: prayer of fortitude

* Magic number removed

* Update PaladinActions.cpp

* Update PaladinActions.cpp

* Update PaladinActions.cpp

* Update PaladinActions.cpp

* Update PaladinActions.cpp

* Add patch for solo paladin in group

* Correction review

* Update PaladinActions.cpp

* Add harcoded text to DB
2025-09-18 19:52:26 +02:00
Yunfan Li
51ed9c4649 fix trinket (#1429) 2025-07-07 19:41:47 +02:00
Veit F.
453925153f [URGENT Fix] Trinket proc effects are getting cast even if they are not onUse - Leads to big server lags (#1385)
* fix: 🚑 Add spellProcFlag check for flag 2 at UseTrinket Context-Action

Bots will "learn" the trinket proc, so CanCastSpell() will be true e.g. on Item https://www.wowhead.com/wotlk/item=44074/oracle-talisman-of-ablution leading to constant casting of the proc spell onto themselfes https://www.wowhead.com/wotlk/spell=59787/oracle-ablutions. This will lead to multiple hundreds of entries in m_appliedAuras -> Once killing an enemy -> Big diff time spikes. See diagnosis

* perf:  Should futher reduce the problems, hindering trinkets with other proc flags of being used, see https://www.azerothcore.org/wiki/spell_proc_event

I have tested bots with active trinkets and they are still using them, as well as onhit trinkets are still being triggered like they should. Could also fix some other weird behavior.
2025-06-22 00:08:47 +02:00
Cryo81
07e4dec70d Warning fix + ilvl function fix (#1210)
* 1 variable order warning fixed
70 unused variable warning fixed

* Fixed GetEquipGearScore function

---------

Co-authored-by: Julien MAS <julien.mas81@gmail.com>
2025-04-20 14:26:42 +08:00
Yunfan Li
21e17e163b [Spell] Healer spell enhancement 2024-10-04 20:48:29 +08:00
Yunfan Li
f20d3aea6c Unholy dk 2024-09-06 20:29:56 +08:00
Yunfan Li
360a025b34 Estimated dps calculation 2024-09-01 17:11:46 +08:00
Yunfan Li
a1cb9dea05 Improve class spell and use trinket 2024-08-14 18:37:21 +08:00
Yunfan Li
53611c9040 Run clang-format 2024-08-04 10:23:36 +08:00
Yunfan Li
5f31941820 Auto save mana strategy 2024-03-23 18:11:46 +08:00
Yunfan Li
a76290a149 better shaman totem strategy 2023-10-29 00:16:31 +08:00
Yunfan Li
a24e60f03d facing to & reach party member to resurrect 2023-09-14 23:29:09 +08:00
Yunfan Li
243a4df967 optimize class spell 2023-09-08 12:44:38 +08:00
Yunfan Li
63048f2405 fix debuff trigger 2023-09-05 09:58:21 +08:00
Yunfan Li
5e676e60e0 debuff on attacker 2023-09-05 01:41:13 +08:00
Yunfan Li
1136b7bfdc debuff on melee attackers 2023-08-28 17:28:36 +08:00
Yunfan Li
1c47108c23 coredump fix & rpg actions 2023-08-03 15:15:31 +08:00
Yunfan Li
617d0ee031 remove debug info 2023-06-11 19:16:56 +08:00
Yunfan Li
e7ad355396 miscs(spell): paladin, rogue poison, shaman totem 2023-06-11 18:21:45 +08:00
Yunfan Li
33576bd969 fix(spell): paladin and dk aggro spell, warrior 2023-06-11 15:55:36 +08:00
Yunfan Li
98e46a3d02 miscs(raid strategy, distance triggers, etc) 2023-06-06 00:11:35 +08:00
Yunfan Li
e68a22d968 mage and paladin strategy port 2023-06-03 20:16:35 +08:00
Yunfan Li
0f483047e5 warlock and dk strategy port 2023-06-03 14:01:20 +08:00
Yunfan Li
a44b310c0a debuff trigger and action, allow multiple spell 2023-06-02 19:57:08 +08:00
UltraNix
b952636f0d Big update. 2022-03-12 22:27:09 +01:00