Fix server crash when bots apply strategies on a custom naxx raid (#1052)

This commit is contained in:
valsan-azerty-boi
2025-03-04 20:35:36 +01:00
committed by GitHub
parent bf22f20997
commit a4fe45afbb
3 changed files with 31 additions and 4 deletions

View File

@@ -0,0 +1,12 @@
INSERT INTO `playerbots_travelnode` (`id`, `name`, `map_id`, `x`, `y`, `z`, `linked`) VALUES
(3780, 'Highlord Mograine', 533, 2524.32, -2951.28, 245.633, 1);
INSERT INTO `playerbots_travelnode_path` (`node_id`, `to_node_id`, `nr`, `map_id`, `x`, `y`, `z`) VALUES
(3780, 472, 0, 533, 2524.32, -2951.28, 245.633),
(3780, 472, 1, 533, 2528.79, -2948.58, 245.633),
(3780, 757, 0, 533, 2524.32, -2951.28, 245.633),
(3780, 757, 1, 533, 2517.62, -2959.38, 245.636);
INSERT INTO `playerbots_travelnode_link` (`node_id`, `to_node_id`, `type`, `object`, `distance`, `swim_distance`, `extra_cost`, `calculated`, `max_creature_0`, `max_creature_1`, `max_creature_2`) VALUES
(3780, 472, 1, 0, 5.3221, 0, 0, 1, 83, 0, 0),
(3780, 757, 1, 0, 10.6118, 0, 0, 1, 83, 0, 0);

View File

@@ -52,6 +52,10 @@ uint32 GrobbulusRotateAction::GetCurrWaypoint()
return false; return false;
} }
auto* boss_ai = dynamic_cast<Grobbulus::boss_grobbulus::boss_grobbulusAI*>(boss->GetAI()); auto* boss_ai = dynamic_cast<Grobbulus::boss_grobbulus::boss_grobbulusAI*>(boss->GetAI());
if (!boss_ai || boss_ai->events.Empty())
{
return false;
}
EventMap* eventMap = &boss_ai->events; EventMap* eventMap = &boss_ai->events;
const uint32 event_time = eventMap->GetNextEventTime(2); const uint32 event_time = eventMap->GetNextEventTime(2);
return (event_time / 15000) % intervals; return (event_time / 15000) % intervals;
@@ -65,6 +69,10 @@ bool HeiganDanceAction::CalculateSafe()
return false; return false;
} }
auto* boss_ai = dynamic_cast<Heigan::boss_heigan::boss_heiganAI*>(boss->GetAI()); auto* boss_ai = dynamic_cast<Heigan::boss_heigan::boss_heiganAI*>(boss->GetAI());
if (!boss_ai || boss_ai->events.Empty())
{
return false;
}
EventMap* eventMap = &boss_ai->events; EventMap* eventMap = &boss_ai->events;
uint32 curr_phase = boss_ai->currentPhase; uint32 curr_phase = boss_ai->currentPhase;
uint32 curr_erupt = eventMap->GetNextEventTime(3); uint32 curr_erupt = eventMap->GetNextEventTime(3);
@@ -423,17 +431,21 @@ bool HorsemanAttactInOrderAction::Execute(Event event)
} }
Unit* target = nullptr; Unit* target = nullptr;
Unit* thane = AI_VALUE2(Unit*, "find target", "thane korth'azz"); Unit* thane = AI_VALUE2(Unit*, "find target", "thane korth'azz");
Unit* baron = AI_VALUE2(Unit*, "find target", "baron rivendare");
Unit* lady = AI_VALUE2(Unit*, "find target", "lady blaumeux"); Unit* lady = AI_VALUE2(Unit*, "find target", "lady blaumeux");
Unit* sir = AI_VALUE2(Unit*, "find target", "sir zeliek"); Unit* sir = AI_VALUE2(Unit*, "find target", "sir zeliek");
Unit* fourth = AI_VALUE2(Unit*, "find target", "baron rivendare");
if (!fourth)
{
fourth = AI_VALUE2(Unit*, "find target", "highlord mograine");
}
std::vector<Unit*> attack_order; std::vector<Unit*> attack_order;
if (botAI->IsAssistTank(bot)) if (botAI->IsAssistTank(bot))
{ {
attack_order = {baron, thane, lady, sir}; attack_order = {fourth, thane, lady, sir};
} }
else else
{ {
attack_order = {thane, baron, lady, sir}; attack_order = {thane, fourth, lady, sir};
} }
for (Unit* t : attack_order) for (Unit* t : attack_order)
{ {

View File

@@ -41,8 +41,11 @@ float HeiganDanceMultiplier::GetValue(Action* action)
{ {
return 1.0f; return 1.0f;
} }
auto* boss_ai = dynamic_cast<Heigan::boss_heigan::boss_heiganAI*>(boss->GetAI()); auto* boss_ai = dynamic_cast<Heigan::boss_heigan::boss_heiganAI*>(boss->GetAI());
if (!boss_ai || boss_ai->events.Empty())
{
return 1.0f;
}
EventMap* eventMap = &boss_ai->events; EventMap* eventMap = &boss_ai->events;
uint32 curr_phase = boss_ai->currentPhase; uint32 curr_phase = boss_ai->currentPhase;
uint32 curr_dance = eventMap->GetNextEventTime(4); uint32 curr_dance = eventMap->GetNextEventTime(4);