Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
aa48a74
Add aggressive targeting strategy and related actions for PlayerBots
dillyns Feb 3, 2026
af5e90d
Remove call to NonCombatStrategy::InitTriggers in AggressiveStrategy
dillyns Feb 3, 2026
0907538
pr comment fixes
dillyns Feb 5, 2026
bebac60
test-staging alignment (#2121)
kadeshar Feb 6, 2026
b31bda8
Refactor raid strategy framework (#2069)
brighton-chi Feb 6, 2026
026df0d
Chilton wand fix (#2115)
kadeshar Feb 6, 2026
76b6df9
Extend SummonWhenGroup to auto-added bots (#2034)
Wishmaster117 Feb 6, 2026
6ed3f24
Enforce test fix (#2122)
kadeshar Feb 7, 2026
79fb3a5
- Fixed Oculus drake mounting
kadeshar Feb 7, 2026
8585f10
Implement Serpentshrine Cavern Strategies (#1888)
brighton-chi Feb 8, 2026
3db2a5a
Refactor of EquipActions (#1994)
Celandriel Feb 8, 2026
e9e79ad
Fix LootRollLevel=1 to match documented 'greed' behavior (#2068)
Hokken Feb 8, 2026
cfb2ed4
Merge pull request #2124 from kadeshar/oculus-drake-fix
kadeshar Feb 8, 2026
c9c936d
Add Unending Breath to Warlock NonCombat Strat (#2074)
dillyns Feb 8, 2026
610fdc1
Fix bug with GetCreature + GetGameObject = use ObjectAccessor's metho…
privatecore Feb 8, 2026
ee2a399
Refactor newrpginfo data union to std::variant (#2079)
Celandriel Feb 13, 2026
80b3823
Warnings PR 3, remove std::move when not necessary. (#2108)
Celandriel Feb 13, 2026
a0a5020
Fix action validation checks: isUseful -> isPossible + codestyle fixe…
privatecore Feb 13, 2026
17b8d7f
Stage1 refactor world position method names (#2126)
Wishmaster117 Feb 13, 2026
9748e36
Fix potential failure of Magtheridon cube clickers to engage in comba…
brighton-chi Feb 13, 2026
25800f5
Fix/Feat: PVP with master and PVP probablity system (thread-safe rema…
NoxMax Feb 13, 2026
80aeeda
Flying, waterwalking, swimming movement optimizations and transition …
hermensbas Feb 14, 2026
441f9f7
Warnings PR 1: Event warnings and headers (#2106)
Celandriel Feb 14, 2026
3c62a45
Revert "Convert PlayerBots tables to InnoDB (#2083)"
hermensbas Feb 15, 2026
d1cac8d
Bug fix. Equip Action triggered action (#2142)
Celandriel Feb 16, 2026
403ca41
Move combat check to action isUseful
dillyns Feb 16, 2026
cc68b35
Merge remote-tracking branch 'origin/test-staging' into addAggressive…
dillyns Feb 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/check_pr_source.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
name: Enforce test-staging → main
name: Enforce test-staging → master

on:
pull_request:
branches:
- master
- test-staging

jobs:
require-test-staging:
runs-on: ubuntu-22.04
if: github.event.pull_request.base.ref == 'master'
steps:
- name: Ensure PR source is test-staging
run: |
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/code_style.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Codestyle

on:
push:
branches: [ "master" ]
branches: [ "master", "test-staging" ]
pull_request:
branches: [ "master" ]
branches: [ "master", "test-staging" ]

concurrency:
group: "codestyle-${{ github.event.pull_request.number }}"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/core_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: ubuntu-build

on:
push:
branches: [ "master" ]
branches: [ "master", "test-staging" ]
pull_request:
branches: [ "master" ]
branches: [ "master", "test-staging" ]

concurrency:
group: "core-build-${{ github.event.pull_request.number }}"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/macos_build.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name: macos-build
on:
push:
branches: [ "master" ]
branches: [ "master", "test-staging" ]
pull_request:
branches: [ "master" ]
branches: [ "master", "test-staging" ]

concurrency:
group: "macos-build-${{ github.event.pull_request.number }}"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/windows_build.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name: windows-build
on:
push:
branches: [ "master" ]
branches: [ "master", "test-staging" ]
pull_request:
branches: [ "master" ]
branches: [ "master", "test-staging" ]

concurrency:
group: "windows-build-${{ github.event.pull_request.number }}"
Expand Down
4 changes: 2 additions & 2 deletions conf/playerbots.conf.dist
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,7 @@ AiPlayerbot.AutoGearScoreLimit = 0
# "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 cheats implemented into raid strategies (currently only for Ulduar))
# "raid" (bots use cheats implemented into raid strategies (currently only for SSC and Ulduar))
# 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"
Expand Down Expand Up @@ -2182,4 +2182,4 @@ AiPlayerbot.SummonAtInnkeepersEnabled = 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 PP, Sindragosa and Lich King

AiPlayerbot.EnableICCBuffs = 1
AiPlayerbot.EnableICCBuffs = 1

This file was deleted.

18 changes: 0 additions & 18 deletions data/sql/playerbots/updates/2026_01_30_00_change_to_InnoDB.sql

This file was deleted.

2 changes: 2 additions & 0 deletions src/Ai/Base/ActionContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ class ActionContext : public NamedObjectContext<Action>
creators["runaway"] = &ActionContext::runaway;
creators["stay"] = &ActionContext::stay;
creators["sit"] = &ActionContext::sit;
creators["aggressive target"] = &ActionContext::aggressive_target;
creators["attack anything"] = &ActionContext::attack_anything;
creators["attack least hp target"] = &ActionContext::attack_least_hp_target;
creators["attack enemy player"] = &ActionContext::attack_enemy_player;
Expand Down Expand Up @@ -315,6 +316,7 @@ class ActionContext : public NamedObjectContext<Action>
static Action* suggest_what_to_do(PlayerbotAI* botAI) { return new SuggestWhatToDoAction(botAI); }
static Action* suggest_trade(PlayerbotAI* botAI) { return new SuggestTradeAction(botAI); }
static Action* suggest_dungeon(PlayerbotAI* botAI) { return new SuggestDungeonAction(botAI); }
static Action* aggressive_target(PlayerbotAI* botAI) { return new AggressiveTargetAction(botAI); }
static Action* attack_anything(PlayerbotAI* botAI) { return new AttackAnythingAction(botAI); }
static Action* attack_least_hp_target(PlayerbotAI* botAI) { return new AttackLeastHpTargetAction(botAI); }
static Action* attack_enemy_player(PlayerbotAI* botAI) { return new AttackEnemyPlayerAction(botAI); }
Expand Down
6 changes: 3 additions & 3 deletions src/Ai/Base/Actions/AcceptBattlegroundInvitationAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
#include "AcceptBattlegroundInvitationAction.h"

#include "Event.h"
#include "Playerbots.h"
#include "PlayerbotAI.h"

bool AcceptBgInvitationAction::Execute(Event event)
bool AcceptBgInvitationAction::Execute(Event /*event*/)
{
uint8 type = 0; // arenatype if arena
uint8 unk2 = 0; // unk, can be 0x0 (may be if was invited?) and 0x1
Expand All @@ -18,9 +18,9 @@ bool AcceptBgInvitationAction::Execute(Event event)

WorldPacket packet(CMSG_BATTLEFIELD_PORT, 20);
packet << type << unk2 << (uint32)bgTypeId_ << unk << action;
// packet << bgTypeId_ << action;
bot->GetSession()->HandleBattleFieldPortOpcode(packet);

botAI->ResetStrategies();

return true;
}
2 changes: 1 addition & 1 deletion src/Ai/Base/Actions/AddLootAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ bool AddLootAction::Execute(Event event)
return AI_VALUE(LootObjectStack*, "available loot")->Add(guid);
}

bool AddAllLootAction::Execute(Event event)
bool AddAllLootAction::Execute(Event /*event*/)
{
bool added = false;

Expand Down
2 changes: 1 addition & 1 deletion src/Ai/Base/Actions/AreaTriggerAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ bool ReachAreaTriggerAction::Execute(Event event)
return true;
}

bool AreaTriggerAction::Execute(Event event)
bool AreaTriggerAction::Execute(Event /*event*/)
{
LastMovement& movement = context->GetValue<LastMovement&>("last area trigger")->Get();

Expand Down
7 changes: 4 additions & 3 deletions src/Ai/Base/Actions/AutoMaintenanceOnLevelupAction.cpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
#include "AutoMaintenanceOnLevelupAction.h"

#include "GuildMgr.h"
#include "SpellMgr.h"

#include "PlayerbotAIConfig.h"
#include "PlayerbotFactory.h"
#include "Playerbots.h"
#include "RandomPlayerbotMgr.h"
#include "SharedDefines.h"
#include "BroadcastHelper.h"

bool AutoMaintenanceOnLevelupAction::Execute(Event event)
bool AutoMaintenanceOnLevelupAction::Execute(Event /*event*/)
{
AutoPickTalents();
AutoLearnSpell();
AutoUpgradeEquip();
AutoTeleportForLevel();

return true;
}

Expand Down
9 changes: 4 additions & 5 deletions src/Ai/Base/Actions/BattleGroundJoinAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@
#include "PlayerbotAI.h"
#include "Playerbots.h"
#include "PositionValue.h"
#include "UpdateTime.h"

bool BGJoinAction::Execute(Event event)
bool BGJoinAction::Execute(Event /*event*/)
{
uint32 queueType = AI_VALUE(uint32, "bg type");
if (!queueType) // force join to fill bg
Expand Down Expand Up @@ -653,7 +652,7 @@ bool FreeBGJoinAction::shouldJoinBg(BattlegroundQueueTypeId queueTypeId, Battleg
return false;
}

bool BGLeaveAction::Execute(Event event)
bool BGLeaveAction::Execute(Event /*event*/)
{
if (!(bot->InBattlegroundQueue() || bot->InBattleground()))
return false;
Expand Down Expand Up @@ -1064,7 +1063,7 @@ bool BGStatusAction::Execute(Event event)
return true;
}

bool BGStatusCheckAction::Execute(Event event)
bool BGStatusCheckAction::Execute(Event /*event*/)
{
if (bot->IsBeingTeleported())
return false;
Expand All @@ -1080,7 +1079,7 @@ bool BGStatusCheckAction::Execute(Event event)

bool BGStatusCheckAction::isUseful() { return bot->InBattlegroundQueue(); }

bool BGStrategyCheckAction::Execute(Event event)
bool BGStrategyCheckAction::Execute(Event /*event*/)
{
bool inside_bg = bot->InBattleground() && bot->GetBattleground();
;
Expand Down
4 changes: 2 additions & 2 deletions src/Ai/Base/Actions/BattleGroundTactics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1557,7 +1557,7 @@ bool BGTactics::eyJumpDown()
//
// actual bg tactics below
//
bool BGTactics::Execute(Event event)
bool BGTactics::Execute(Event /*event*/)
{
Battleground* bg = bot->GetBattleground();
if (!bg)
Expand Down Expand Up @@ -4249,7 +4249,7 @@ bool BGTactics::IsLockedInsideKeep()
return false;
}

bool ArenaTactics::Execute(Event event)
bool ArenaTactics::Execute(Event /*event*/)
{
if (!bot->InBattleground())
{
Expand Down
8 changes: 4 additions & 4 deletions src/Ai/Base/Actions/BossAuraActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ bool BossFireResistanceAction::isUseful()
return bossFireResistanceTrigger.IsActive();
}

bool BossFireResistanceAction::Execute(Event event)
bool BossFireResistanceAction::Execute(Event /*event*/)
{
PaladinFireResistanceStrategy paladinFireResistanceStrategy(botAI);
botAI->ChangeStrategy(ADD_STRATEGY_CHAR + paladinFireResistanceStrategy.getName(), BotState::BOT_STATE_COMBAT);
Expand All @@ -32,7 +32,7 @@ bool BossFrostResistanceAction::isUseful()
return bossFrostResistanceTrigger.IsActive();
}

bool BossFrostResistanceAction::Execute(Event event)
bool BossFrostResistanceAction::Execute(Event /*event*/)
{
PaladinFrostResistanceStrategy paladinFrostResistanceStrategy(botAI);
botAI->ChangeStrategy(ADD_STRATEGY_CHAR + paladinFrostResistanceStrategy.getName(), BotState::BOT_STATE_COMBAT);
Expand All @@ -46,7 +46,7 @@ bool BossNatureResistanceAction::isUseful()
return bossNatureResistanceTrigger.IsActive();
}

bool BossNatureResistanceAction::Execute(Event event)
bool BossNatureResistanceAction::Execute(Event /*event*/)
{
HunterNatureResistanceStrategy hunterNatureResistanceStrategy(botAI);
botAI->ChangeStrategy(ADD_STRATEGY_CHAR + hunterNatureResistanceStrategy.getName(), BotState::BOT_STATE_COMBAT);
Expand All @@ -60,7 +60,7 @@ bool BossShadowResistanceAction::isUseful()
return bossShadowResistanceTrigger.IsActive();
}

bool BossShadowResistanceAction::Execute(Event event)
bool BossShadowResistanceAction::Execute(Event /*event*/)
{
PaladinShadowResistanceStrategy paladinShadowResistanceStrategy(botAI);
botAI->ChangeStrategy(ADD_STRATEGY_CHAR + paladinShadowResistanceStrategy.getName(), BotState::BOT_STATE_COMBAT);
Expand Down
4 changes: 2 additions & 2 deletions src/Ai/Base/Actions/BuyAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ bool BuyAction::Execute(Event event)

if (needMoneyFor == NeedMoneyFor::gear)
{
botAI->DoSpecificAction("equip upgrades");
botAI->DoSpecificAction("equip upgrades packet action");
}
}
}
Expand Down Expand Up @@ -206,7 +206,7 @@ bool BuyAction::Execute(Event event)
if (usage == ITEM_USAGE_REPLACE || usage == ITEM_USAGE_EQUIP ||
usage == ITEM_USAGE_BAD_EQUIP || usage == ITEM_USAGE_BROKEN_EQUIP)
{
botAI->DoSpecificAction("equip upgrades");
botAI->DoSpecificAction("equip upgrades packet action");
break;
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/Ai/Base/Actions/CancelChannelAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
#include "Player.h"
#include "PlayerbotAI.h"

bool CancelChannelAction::Execute(Event event)
bool CancelChannelAction::Execute(Event /*event*/)
{
if (bot->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
{
bot->InterruptSpell(CURRENT_CHANNELED_SPELL);

return true;
}

return false;
}
2 changes: 1 addition & 1 deletion src/Ai/Base/Actions/CastCustomSpellAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ bool CastRandomSpellAction::castSpell(uint32 spellId, WorldObject* wo)
return botAI->CastSpell(spellId, wo->GetPositionX(), wo->GetPositionY(), wo->GetPositionZ());
}

bool DisEnchantRandomItemAction::Execute(Event event)
bool DisEnchantRandomItemAction::Execute(Event /*event*/)
{
std::vector<Item*> items =
AI_VALUE2(std::vector<Item*>, "inventory items", "usage " + std::to_string(ITEM_USAGE_DISENCHANT));
Expand Down
10 changes: 5 additions & 5 deletions src/Ai/Base/Actions/ChangeTalentsAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
#include "Event.h"
#include "PlayerbotAIConfig.h"
#include "PlayerbotFactory.h"
#include "Playerbots.h"
#include "AiObjectContext.h"
#include "Log.h"
#include "RandomPlayerbotMgr.h"

bool ChangeTalentsAction::Execute(Event event)
{
Expand Down Expand Up @@ -184,7 +184,7 @@ std::string ChangeTalentsAction::SpecApply(std::string param)
// // }
// // }

// return std::move(ret);
// return ret;
// }

// std::vector<TalentPath*> ChangeTalentsAction::getPremadePaths(TalentSpec* oldSpec)
Expand All @@ -201,7 +201,7 @@ std::string ChangeTalentsAction::SpecApply(std::string param)
// // }
// // }

// return std::move(ret);
// return ret;
// }

// TalentPath* ChangeTalentsAction::getPremadePath(uint32 id)
Expand Down Expand Up @@ -368,11 +368,11 @@ std::string ChangeTalentsAction::SpecApply(std::string param)
// return nullptr;
// }

bool AutoSetTalentsAction::Execute(Event event)
bool AutoSetTalentsAction::Execute(Event /*event*/)
{
std::ostringstream out;

if (!sPlayerbotAIConfig.autoPickTalents || !sRandomPlayerbotMgr.IsRandomBot(bot))
if (!PlayerbotAIConfig::instance().autoPickTalents || !RandomPlayerbotMgr::instance().IsRandomBot(bot))
return false;

if (bot->GetFreeTalentPoints() <= 0)
Expand Down
Loading