Skip to content

Commit 5892bbe

Browse files
authored
Implement scanning for Liquid Fire and Proximity Bombs (trickerer#24)
* Implement scanning for Liquid Fire and Proximity Bombs Added scanning logic for Liquid Fire puddles and Proximity Bombs in Hellfire Ramparts and The Shattered Halls. * Update bot_ai.cpp
1 parent 5af0643 commit 5892bbe

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

src/server/game/AI/NpcBots/bot_ai.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5278,6 +5278,67 @@ void bot_ai::CalculateAoeSpots(Unit const* unit, AoeSpotsVec& spots)
52785278
spots.emplace_back(*creature, radius);
52795279
}
52805280
}
5281+
// Hellfire Ramparts — Liquid Fire puddles
5282+
if (unit->GetMapId() == 543) // Hellfire Ramparts
5283+
{
5284+
// GO entries to avoid
5285+
static constexpr uint32 GO_LIQUID_FIRE_1 = 180125;
5286+
static constexpr uint32 GO_LIQUID_FIRE_2 = 181890;
5287+
static constexpr uint32 GO_LIQUID_FIRE_3 = 182533;
5288+
5289+
auto scanGoEntry = [unit, &spots](uint32 entry, float scanRange, float baseRadius)
5290+
{
5291+
std::list<GameObject*> list;
5292+
Bcore::AllGameObjectsWithEntryInRange check(unit, entry, scanRange);
5293+
Bcore::GameObjectListSearcher<Bcore::AllGameObjectsWithEntryInRange> searcher(unit, list, check);
5294+
Cell::VisitObjects(unit, searcher, scanRange);
5295+
5296+
for (GameObject* go : list)
5297+
{
5298+
if (!go)
5299+
continue;
5300+
5301+
float radius = baseRadius + go->GetObjectSize() + DEFAULT_COMBAT_REACH * 1.2f;
5302+
spots.emplace_back(*go, radius);
5303+
}
5304+
};
5305+
5306+
constexpr float SCAN = 40.f;
5307+
constexpr float BASE = 12.0f;
5308+
5309+
scanGoEntry(GO_LIQUID_FIRE_1, SCAN, BASE);
5310+
scanGoEntry(GO_LIQUID_FIRE_2, SCAN, BASE);
5311+
scanGoEntry(GO_LIQUID_FIRE_3, SCAN, BASE);
5312+
}
5313+
// The Blood Furnace — Proximity Bombs
5314+
else if (unit->GetMapId() == 542)
5315+
{
5316+
static constexpr uint32 GO_PROXIMITY_BOMB_A = 181877;
5317+
static constexpr uint32 GO_PROXIMITY_BOMB_B = 182607;
5318+
5319+
auto scanBombs = [unit, &spots](uint32 entry, float scanRange, float baseRadius)
5320+
{
5321+
std::list<GameObject*> bombs;
5322+
Bcore::AllGameObjectsWithEntryInRange check(unit, entry, scanRange);
5323+
Bcore::GameObjectListSearcher<Bcore::AllGameObjectsWithEntryInRange> searcher(unit, bombs, check);
5324+
Cell::VisitObjects(unit, searcher, scanRange);
5325+
5326+
for (GameObject* go : bombs)
5327+
{
5328+
if (!go)
5329+
continue;
5330+
5331+
float radius = baseRadius + go->GetObjectSize() + DEFAULT_COMBAT_REACH * 1.5f;
5332+
spots.emplace_back(*go, radius);
5333+
}
5334+
};
5335+
5336+
constexpr float SCAN_RANGE = 40.f;
5337+
constexpr float BOMB_BASE_RADIUS = 10.0f;
5338+
5339+
scanBombs(GO_PROXIMITY_BOMB_A, SCAN_RANGE, BOMB_BASE_RADIUS);
5340+
scanBombs(GO_PROXIMITY_BOMB_B, SCAN_RANGE, BOMB_BASE_RADIUS);
5341+
}
52815342
//Magister's Terrace
52825343
else if (unit->GetMapId() == 585)
52835344
{

0 commit comments

Comments
 (0)