diff --git a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActionContext.h b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActionContext.h index 0ba0b1d2..4797b69c 100644 --- a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActionContext.h +++ b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActionContext.h @@ -13,11 +13,13 @@ class WotlkDungeonFoSActionContext : public NamedObjectContext creators["move from bronjahm"] = &WotlkDungeonFoSActionContext::move_from_bronjahm; creators["attack corrupted soul fragment"] = &WotlkDungeonFoSActionContext::attack_corrupted_soul_fragment; creators["bronjahm group position"] = &WotlkDungeonFoSActionContext::bronjahm_group_position; + creators["devourer of souls"] = &WotlkDungeonFoSActionContext::devourer_of_souls; } private: static Action* move_from_bronjahm(PlayerbotAI* ai) { return new MoveFromBronjahmAction(ai); } static Action* attack_corrupted_soul_fragment(PlayerbotAI* ai) { return new AttackCorruptedSoulFragmentAction(ai); } static Action* bronjahm_group_position(PlayerbotAI* ai) { return new BronjahmGroupPositionAction(ai); } + static Action* devourer_of_souls(PlayerbotAI* ai) { return new DevourerOfSoulsAction(ai); } }; #endif diff --git a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActions.cpp b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActions.cpp index 0992bd3b..f3153452 100644 --- a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActions.cpp +++ b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActions.cpp @@ -1,6 +1,7 @@ #include "Playerbots.h" #include "ForgeOfSoulsActions.h" #include "ForgeOfSoulsStrategy.h" +#include "SharedDefines.h" bool MoveFromBronjahmAction::Execute(Event event) { @@ -8,36 +9,47 @@ bool MoveFromBronjahmAction::Execute(Event event) if (!boss) return false; - - float distance = bot->GetExactDist2d(boss->GetPosition()); - float targetDis = 20.0f; - if (distance >= targetDis) - return false; - return MoveAway(boss, targetDis - distance); + if (bot->GetExactDist2d(boss) < 10.0f) + return FleePosition(boss->GetPosition(), 15.0f, 2000U); + else + return true; + + return false; } bool AttackCorruptedSoulFragmentAction::Execute(Event event) { - Unit* fragment = nullptr; + Unit* currentTarget = AI_VALUE(Unit*, "current target"); + GuidVector targets = AI_VALUE(GuidVector, "possible targets"); - GuidVector targets = AI_VALUE(GuidVector, "possible targets no los"); - - for (auto &target : targets) + // If no valid skull target, search for corrupted soul fragment + Unit* empoweredPrince = nullptr; + for (auto i = targets.begin(); i != targets.end(); ++i) { - Unit* unit = botAI->GetUnit(target); - if (unit && unit->GetEntry() == NPC_CORRUPTED_SOUL_FRAGMENT) + Unit* unit = botAI->GetUnit(*i); + if (!unit || !unit->IsAlive()) + continue; + + if (unit->GetEntry() == NPC_CORRUPTED_SOUL_FRAGMENT) { - fragment = unit; - break; + empoweredPrince = unit; + + // Mark corrupted soul fragment with skull if in group and not already marked + if (Group* group = bot->GetGroup()) + { + ObjectGuid currentSkullGuid = group->GetTargetIcon(7); + if (currentSkullGuid.IsEmpty() || currentSkullGuid != unit->GetGUID()) + { + group->SetTargetIcon(7, bot->GetGUID(), unit->GetGUID()); // 7 = skull + } + } + break; } + } - if (fragment && AI_VALUE(Unit*, "current target") != fragment) - return Attack(fragment); - - return false; - + return false; } @@ -47,28 +59,73 @@ bool BronjahmGroupPositionAction::Execute(Event event) if (!boss) return false; - if (botAI->IsTank(bot)) + Aura* aura = botAI->GetAura("soulstorm", boss); + bool hasAura = aura; + + Unit* corruptedSoul = bot->FindNearestCreature(NPC_CORRUPTED_SOUL_FRAGMENT, 50.0f); + bool activeSoulExists = corruptedSoul && corruptedSoul->IsAlive(); + + if (botAI->IsTank(bot) && botAI->HasAggro(boss)) { - bot->SetTarget(boss->GetGUID()); - if (AI_VALUE2(bool, "has aggro", "current target")) + // If any corrupted soul exists, handle positioning carefully + if (activeSoulExists) + { + GuidVector npcs = AI_VALUE(GuidVector, "nearest hostile npcs"); + for (auto& npc : npcs) + { + Unit* unit = botAI->GetUnit(npc); + if (unit && unit->GetEntry() == NPC_CORRUPTED_SOUL_FRAGMENT) + { + // Soul exists - check positions + float soulToBossDist = unit->GetExactDist2d(boss); + float tankToBossDist = bot->GetExactDist2d(boss); + float soulToTankDist = unit->GetExactDist2d(bot); + + // Handle edge case: if soul is between tank and boss + // This happens when: (tankToBossDist > soulToBossDist) AND (soulToTankDist < tankToBossDist) + if (tankToBossDist > soulToBossDist && soulToTankDist < tankToBossDist) + { + // Calculate position 5 yards behind boss from the soul's perspective + float angle = boss->GetAngle(unit); // Angle from boss to soul + float oppositeAngle = Position::NormalizeOrientation(angle + M_PI); // Opposite direction + + // Calculate position 5 yards behind boss + float x = boss->GetPositionX() + 5.0f * cos(oppositeAngle); + float y = boss->GetPositionY() + 5.0f * sin(oppositeAngle); + float z = boss->GetPositionZ(); + + return MoveTo(bot->GetMapId(), x, y, z, false, false, false, true, + MovementPriority::MOVEMENT_NORMAL); + } + + // If soul is near boss, flee from boss + if (soulToBossDist < 10.0f) + return FleePosition(unit->GetPosition(), 13.0f, 1000U); + + // If soul exists but none of the above conditions, don't move to tank position yet + bot->SetFacingToObject(boss); + return true; + } + } + } + else + { + // No souls exist, safe to move to tank position if (bot->GetExactDist2d(BRONJAHM_TANK_POSITION) > 5.0f) + { return MoveTo(bot->GetMapId(), BRONJAHM_TANK_POSITION.GetPositionX(), BRONJAHM_TANK_POSITION.GetPositionY(), BRONJAHM_TANK_POSITION.GetPositionZ(), false, false, false, true, MovementPriority::MOVEMENT_NORMAL); - else - return Attack(boss); - else - { - return Attack(boss); + } } } else { float maxMovement = 10.0f; - if (bot->GetExactDist2d(boss) > maxMovement) + if (bot->GetExactDist2d(boss) > maxMovement && !activeSoulExists && (hasAura || boss->FindCurrentSpellBySpellId(SPELL_SOULSTORM_VISUAL) || boss->FindCurrentSpellBySpellId(SPELL_SOULSTORM_VISUAL2))) { - if (bot->getClass() == CLASS_HUNTER) + if (botAI->IsRanged(bot)) { return Move(bot->GetAngle(boss), fmin(bot->GetExactDist2d(boss) - 6.5f, maxMovement)); } @@ -80,8 +137,33 @@ bool BronjahmGroupPositionAction::Execute(Event event) else return false; } + + return false; } bool BronjahmGroupPositionAction::isUseful() { return true; } +bool DevourerOfSoulsAction::Execute(Event event) +{ + Unit* boss = AI_VALUE2(Unit*, "find target", "devourer of souls"); + if (!boss) + return false; + + Aura* aura = botAI->GetAura("mirrored soul", boss); + bool hasAura = aura; + + if (!botAI->IsTank(bot) && !botAI->IsHeal(bot) && hasAura) + { + // Calculate the opposite direction + float angle = bot->GetAngle(boss); + float newAngle = Position::NormalizeOrientation(angle + M_PI); // Add 180 degrees (PI radians) + + // Set the bot's orientation to face away from DoS = no attacks + bot->SetFacingTo(newAngle); + return true; + } + + return false; +} + diff --git a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActions.h b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActions.h index 2388fe50..d9b762be 100644 --- a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActions.h +++ b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsActions.h @@ -33,5 +33,19 @@ public: bool isUseful() override; }; +class DevourerOfSoulsAction : public AttackAction +{ +public: + DevourerOfSoulsAction(PlayerbotAI * ai, float distance = 10.0f, float delta_angle = M_PI / 8) + : AttackAction(ai, "devourer of souls") + { + this->distance = distance; + this->delta_angle = delta_angle; + } + virtual bool Execute(Event event); + +protected: + float distance, delta_angle; +}; #endif diff --git a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsMultipliers.cpp b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsMultipliers.cpp index 36f67fb0..7ddcffb8 100644 --- a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsMultipliers.cpp +++ b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsMultipliers.cpp @@ -15,8 +15,7 @@ float BronjahmMultiplier::GetValue(Action* action) { if (dynamic_cast(action)) return 0.0f; - if (boss->FindCurrentSpellBySpellId(SPELL_CORRUPT_SOUL) && - bot->HasAura(SPELL_CORRUPT_SOUL)) + if (bot->HasAura(SPELL_CORRUPT_SOUL)) { if (dynamic_cast(action) && !dynamic_cast(action)) { diff --git a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsStrategy.cpp b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsStrategy.cpp index 68b89157..b70b518e 100644 --- a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsStrategy.cpp +++ b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsStrategy.cpp @@ -1,18 +1,20 @@ #include "ForgeOfSoulsStrategy.h" #include "ForgeOfSoulsMultipliers.h" -void WotlkDungeonFoSStrategy::InitTriggers(std::vector& triggers) { - triggers.push_back( - new TriggerNode("move from bronjahm", - NextAction::array(0, new NextAction("move from bronjahm", ACTION_MOVE + 5), nullptr))); - triggers.push_back(new TriggerNode( - "switch to soul fragment", NextAction::array(0, new NextAction("attack corrupted soul fragment", ACTION_RAID + 1), nullptr))); +void WotlkDungeonFoSStrategy::InitTriggers(std::vector& triggers) +{ + triggers.push_back(new TriggerNode("move from bronjahm", + NextAction::array(0, new NextAction("move from bronjahm", ACTION_MOVE + 5), nullptr))); + triggers.push_back(new TriggerNode("switch to soul fragment", + NextAction::array(0, new NextAction("attack corrupted soul fragment", ACTION_RAID + 2), nullptr))); triggers.push_back(new TriggerNode("bronjahm position", NextAction::array(0, new NextAction("bronjahm group position", ACTION_RAID + 1), nullptr))); + triggers.push_back(new TriggerNode("devourer of souls", + NextAction::array(0, new NextAction("devourer of souls", ACTION_RAID + 1), nullptr))); } void WotlkDungeonFoSStrategy::InitMultipliers(std::vector& multipliers) { multipliers.push_back(new BronjahmMultiplier(botAI)); - multipliers.push_back(new AttackFragmentMultiplier(botAI)); + //multipliers.push_back(new AttackFragmentMultiplier(botAI)); } diff --git a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggerContext.h b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggerContext.h index 9cef6373..6a85ef67 100644 --- a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggerContext.h +++ b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggerContext.h @@ -13,12 +13,14 @@ public: creators["bronjahm position"] = &WotlkDungeonFosTriggerContext::bronjahm_position; creators["move from bronjahm"] = &WotlkDungeonFosTriggerContext::move_from_bronjahm; creators["switch to soul fragment"] = &WotlkDungeonFosTriggerContext::switch_to_soul_fragment; + creators["devourer of souls"] = &WotlkDungeonFosTriggerContext::devourer_of_souls; } private: static Trigger* move_from_bronjahm(PlayerbotAI* ai) { return new MoveFromBronjahmTrigger(ai); } static Trigger* switch_to_soul_fragment(PlayerbotAI* ai) { return new SwitchToSoulFragment(ai); } static Trigger* bronjahm_position(PlayerbotAI* ai) { return new BronjahmPositionTrigger(ai); } + static Trigger* devourer_of_souls(PlayerbotAI* ai) { return new DevourerOfSoulsTrigger(ai); } }; #endif // !_PLAYERBOT_WOTLKDUNGEONFOSTRIGGERCONTEXT_H diff --git a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggers.cpp b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggers.cpp index c8a3aa0d..d172a756 100644 --- a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggers.cpp +++ b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggers.cpp @@ -6,34 +6,50 @@ bool MoveFromBronjahmTrigger::IsActive() { Unit* boss = AI_VALUE2(Unit*, "find target", "bronjahm"); + if (!boss) + return false; - if (boss && boss->FindCurrentSpellBySpellId(SPELL_CORRUPT_SOUL) && bot->HasAura(SPELL_CORRUPT_SOUL)) - return true; + if (!boss->FindCurrentSpellBySpellId(SPELL_CORRUPT_SOUL)) + return false; - return false; + if (!bot->HasAura(SPELL_CORRUPT_SOUL)) + return false; + + return true; } bool SwitchToSoulFragment::IsActive() { - Unit* fragment = nullptr; - GuidVector targets = AI_VALUE(GuidVector, "possible targets no los"); + Unit* boss = AI_VALUE2(Unit*, "find target", "bronjahm"); + if (!boss) + return false; - for (auto& target : targets) - { - Unit* unit = botAI->GetUnit(target); - if (unit && unit->GetEntry() == NPC_CORRUPTED_SOUL_FRAGMENT) - { - if (botAI->IsDps(bot)) - return true; - } - } + Unit* corruptedSoul = bot->FindNearestCreature(NPC_CORRUPTED_SOUL_FRAGMENT, 50.0f); + bool activeSoulExists = corruptedSoul && corruptedSoul->IsAlive(); - return false; - + if (!activeSoulExists) + return false; + + return true; } bool BronjahmPositionTrigger::IsActive() { + Unit* boss = AI_VALUE2(Unit*, "find target", "bronjahm"); + if (!boss) + return false; - return bool(AI_VALUE2(Unit*, "find target", "bronjahm")); + if (bot->HasAura(SPELL_CORRUPT_SOUL)) + return false; + + return true; +} + +bool DevourerOfSoulsTrigger::IsActive() +{ + Unit* boss = AI_VALUE2(Unit*, "find target", "devourer of souls"); + if (!boss) + return false; + + return true; } diff --git a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggers.h b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggers.h index 3ddf8f66..59dd202d 100644 --- a/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggers.h +++ b/src/strategy/dungeons/wotlk/forgeofsouls/ForgeOfSoulsTriggers.h @@ -8,10 +8,16 @@ enum ForgeOfSoulsBronjahmIDs { - // Boss1 + // Bronjahm NPC_CORRUPTED_SOUL_FRAGMENT = 36535, - SPELL_CORRUPT_SOUL = 68839 + SPELL_CORRUPT_SOUL = 68839, + SPELL_SOULSTORM_VISUAL = 68870, + SPELL_SOULSTORM_VISUAL2 = 68904, + SPELL_SOULSTORM = 68872, + + // Devourer of Souls + SPELL_WAILING_SOULS = 68899, }; class MoveFromBronjahmTrigger : public Trigger @@ -37,4 +43,11 @@ public: bool IsActive() override; }; +class DevourerOfSoulsTrigger : public Trigger +{ +public: + DevourerOfSoulsTrigger(PlayerbotAI* ai) : Trigger(ai, "devourer of souls") {} + bool IsActive() override; +}; + #endif diff --git a/src/strategy/raids/icecrown/RaidIccActions.cpp b/src/strategy/raids/icecrown/RaidIccActions.cpp index 32fb1592..a29d0a11 100644 --- a/src/strategy/raids/icecrown/RaidIccActions.cpp +++ b/src/strategy/raids/icecrown/RaidIccActions.cpp @@ -37,14 +37,28 @@ bool IccLmTankPositionAction::Execute(Event event) if (!boss) return false; - if (botAI->IsTank(bot) || botAI->IsMainTank(bot) || botAI->IsAssistTank(bot)) + if (botAI->IsTank(bot)) { - if (bot->GetExactDist2d(ICC_LM_TANK_POSITION) > 15.0f) - return MoveTo(bot->GetMapId(), ICC_LM_TANK_POSITION.GetPositionX(), - ICC_LM_TANK_POSITION.GetPositionY(), ICC_LM_TANK_POSITION.GetPositionZ(), - false, false, false, false, MovementPriority::MOVEMENT_COMBAT); - else - return false; + if ((botAI->HasAggro(boss) && botAI->IsMainTank(bot)) || botAI->IsAssistTank(bot)) + { + float distance = bot->GetExactDist2d(ICC_LM_TANK_POSITION.GetPositionX(), ICC_LM_TANK_POSITION.GetPositionY()); + if (distance > 3.0f) + { + // Calculate direction vector + float dirX = ICC_LM_TANK_POSITION.GetPositionX() - bot->GetPositionX(); + float dirY = ICC_LM_TANK_POSITION.GetPositionY() - bot->GetPositionY(); + float length = sqrt(dirX * dirX + dirY * dirY); + dirX /= length; + dirY /= length; + + // Move in increments of 3.0f + float moveX = bot->GetPositionX() + dirX * 3.0f; + float moveY = bot->GetPositionY() + dirY * 3.0f; + + return MoveTo(bot->GetMapId(), moveX, moveY, bot->GetPositionZ(), false, false, false, false, + MovementPriority::MOVEMENT_COMBAT); + } + } } return false; @@ -214,10 +228,34 @@ bool IccAddsLadyDeathwhisperAction::Execute(Event event) if (botAI->IsTank(bot) && boss->GetHealthPct() < 95.0f) { - if (bot->GetExactDist2d(ICC_LDW_TANK_POSTION) > 20.0f) - return MoveTo(bot->GetMapId(), ICC_LDW_TANK_POSTION.GetPositionX(), - ICC_LDW_TANK_POSTION.GetPositionY(), ICC_LDW_TANK_POSTION.GetPositionZ(), false, - false, false, false, MovementPriority::MOVEMENT_COMBAT); + // Check if the bot is not the victim of a shade with entry 38222 + GuidVector npcs = AI_VALUE(GuidVector, "nearest hostile npcs"); + for (auto& npc : npcs) + { + Unit* unit = botAI->GetUnit(npc); + if (unit && unit->GetEntry() == 38222 && unit->GetVictim() == bot) + { + return false; // Exit if the bot is the victim of the shade + } + } + + float distance = bot->GetExactDist2d(ICC_LDW_TANK_POSTION.GetPositionX(), ICC_LDW_TANK_POSTION.GetPositionY()); + if (distance > 20.0f) + { + // Calculate direction vector + float dirX = ICC_LDW_TANK_POSTION.GetPositionX() - bot->GetPositionX(); + float dirY = ICC_LDW_TANK_POSTION.GetPositionY() - bot->GetPositionY(); + float length = sqrt(dirX * dirX + dirY * dirY); + dirX /= length; + dirY /= length; + + // Move in increments of 3.0f + float moveX = bot->GetPositionX() + dirX * 3.0f; + float moveY = bot->GetPositionY() + dirY * 3.0f; + + return MoveTo(bot->GetMapId(), moveX, moveY, bot->GetPositionZ(), false, false, false, false, + MovementPriority::MOVEMENT_COMBAT); + } } if (!botAI->IsTank(bot)) @@ -1310,6 +1348,20 @@ bool IccPutricideVolatileOozeAction::Execute(Event event) // Find the ooze Unit* ooze = AI_VALUE2(Unit*, "find target", "volatile ooze"); + if (!ooze) + return false; + + Unit* boss = AI_VALUE2(Unit*, "find target", "professor putricide"); + if (!boss) + return false; + + if (botAI->IsTank(bot) && bot->GetExactDist2d(ICC_PUTRICIDE_TANK_POSITION) > 20.0f && !boss->HealthBelowPct(36) && boss->GetVictim() == bot) + { + return MoveTo(bot->GetMapId(), ICC_PUTRICIDE_TANK_POSITION.GetPositionX(), + ICC_PUTRICIDE_TANK_POSITION.GetPositionY(), ICC_PUTRICIDE_TANK_POSITION.GetPositionZ(), false, false, + false, true, MovementPriority::MOVEMENT_COMBAT, true, false); + } + bool botHasAura = botAI->HasAura("Volatile Ooze Adhesive", bot); bool botHasAura2 = botAI->HasAura("Gaseous Bloat", bot); bool botHasAura3 = botAI->HasAura("Unbound Plague", bot); @@ -1453,11 +1505,23 @@ bool IccPutricideGasCloudAction::Execute(Event event) Unit* volatileOoze = AI_VALUE2(Unit*, "find target", "volatile ooze"); + Unit* boss = AI_VALUE2(Unit*, "find target", "professor putricide"); + if (!boss) + return false; + bool botHasAura = botAI->HasAura("Gaseous Bloat", bot); if(!botHasAura && volatileOoze) return false; + if (botAI->IsTank(bot) && bot->GetExactDist2d(ICC_PUTRICIDE_TANK_POSITION) > 20.0f && !boss->HealthBelowPct(36) && + boss->GetVictim() == bot) + { + return MoveTo(bot->GetMapId(), ICC_PUTRICIDE_TANK_POSITION.GetPositionX(), + ICC_PUTRICIDE_TANK_POSITION.GetPositionY(), ICC_PUTRICIDE_TANK_POSITION.GetPositionZ(), false, + false, false, true, MovementPriority::MOVEMENT_COMBAT, true, false); + } + if (botHasAura) { float botX = bot->GetPositionX(); @@ -1762,7 +1826,7 @@ bool IccBpcMainTankAction::Execute(Event event) if (unit->HasAura(71596)) { if (unit->GetEntry() == 37972 || // Keleseth - unit->GetEntry() == 37973 || // Taldaram + unit->GetEntry() == 37973 || // Taldaram unit->GetEntry() == 37970) // Valanar { empoweredPrince = unit; diff --git a/src/strategy/raids/icecrown/RaidIccActions.h b/src/strategy/raids/icecrown/RaidIccActions.h index 5d93b657..4922c1f0 100644 --- a/src/strategy/raids/icecrown/RaidIccActions.h +++ b/src/strategy/raids/icecrown/RaidIccActions.h @@ -29,8 +29,7 @@ const Position ICC_FESTERGUT_MELEE_SPORE = Position(4269.1772f, 3144.7673f, 360. const Position ICC_ROTFACE_TANK_POSITION = Position(4447.061f, 3150.9758f, 360.38568f); const Position ICC_ROTFACE_BIG_OOZE_POSITION = Position(4432.687f, 3142.3035f, 360.38623f); const Position ICC_ROTFACE_SAFE_POSITION = Position(4446.557f, 3065.6594f, 360.51843f); -//const Position ICC_PUTRICIDE_TANK_OOZE_POSITION = Position(4362.709f, 3229.1448f, 389.4083f); -//const Position ICC_PUTRICIDE_TANK_GAS_CLOUD_POSITION = Position(4397.0386f, 3221.385f, 389.3999f); +const Position ICC_PUTRICIDE_TANK_POSITION = Position(4393.7676f, 3214.9375f, 389.3997f); //const Position ICC_PUTRICIDE_GAS1_POSITION = Position(4350.772f, 3249.9773f, 389.39508f); //const Position ICC_PUTRICIDE_GAS2_POSITION = Position(4390.002f, 3204.8855f, 389.39938f); //const Position ICC_PUTRICIDE_GAS3_POSITION = Position(4367.753f, 3177.5894f, 389.39575f); diff --git a/src/strategy/raids/icecrown/RaidIccStrategy.cpp b/src/strategy/raids/icecrown/RaidIccStrategy.cpp index 293024db..7b204661 100644 --- a/src/strategy/raids/icecrown/RaidIccStrategy.cpp +++ b/src/strategy/raids/icecrown/RaidIccStrategy.cpp @@ -9,7 +9,7 @@ void RaidIccStrategy::InitTriggers(std::vector& triggers) NextAction::array(0, new NextAction("icc lm tank position", ACTION_RAID + 5), nullptr))); triggers.push_back(new TriggerNode("icc spike near", - NextAction::array(0, new NextAction("icc spike", ACTION_RAID + 5), nullptr))); + NextAction::array(0, new NextAction("icc spike", ACTION_RAID + 3), nullptr))); //Lady Deathwhisper triggers.push_back(new TriggerNode("icc dark reckoning",