@@ -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