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;
}
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;
const uint32 event_time = eventMap->GetNextEventTime(2);
return (event_time / 15000) % intervals;
@@ -65,6 +69,10 @@ bool HeiganDanceAction::CalculateSafe()
return false;
}
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;
uint32 curr_phase = boss_ai->currentPhase;
uint32 curr_erupt = eventMap->GetNextEventTime(3);
@@ -423,17 +431,21 @@ bool HorsemanAttactInOrderAction::Execute(Event event)
}
Unit* target = nullptr;
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* 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;
if (botAI->IsAssistTank(bot))
{
attack_order = {baron, thane, lady, sir};
attack_order = {fourth, thane, lady, sir};
}
else
{
attack_order = {thane, baron, lady, sir};
attack_order = {thane, fourth, lady, sir};
}
for (Unit* t : attack_order)
{

View File

@@ -41,8 +41,11 @@ float HeiganDanceMultiplier::GetValue(Action* action)
{
return 1.0f;
}
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;
uint32 curr_phase = boss_ai->currentPhase;
uint32 curr_dance = eventMap->GetNextEventTime(4);