mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
Tweaked Alterac Valley so bots kill final bosses (#886)
* Updated AV strategy so only 2 towers need to be down before final boss * Adjusted role assignments for AV: less defenders, more forward attackers * Added strategy for team has flag in WSG team has flag triggers bg protect fc action @ 75 priority * Updated protectFC function with MoveNear instead of follow
This commit is contained in:
@@ -2454,8 +2454,8 @@ bool BGTactics::selectObjective(bool reset)
|
|||||||
{
|
{
|
||||||
BattlegroundAV* alterValleyBG = (BattlegroundAV*)bg;
|
BattlegroundAV* alterValleyBG = (BattlegroundAV*)bg;
|
||||||
uint32 role = context->GetValue<uint32>("bg role")->Get();
|
uint32 role = context->GetValue<uint32>("bg role")->Get();
|
||||||
bool supportDefense = role < 3; // defensive role and mine capture (mine capture disabled for now)
|
bool supportDefense = role < 2; // defensive role and mine capture (mine capture disabled for now)
|
||||||
bool advancedAttack = role > 5; // doesnt wait for point to be fully captured before moving on
|
bool advancedAttack = role > 4; // doesnt wait for point to be fully captured before moving on
|
||||||
|
|
||||||
// some of the code below is a bit inefficent (lots of rechecking same variables, could be made more
|
// some of the code below is a bit inefficent (lots of rechecking same variables, could be made more
|
||||||
// efficient with a refactor) but it's been left this way so it can be easily reordered. in future we could
|
// efficient with a refactor) but it's been left this way so it can be easily reordered. in future we could
|
||||||
@@ -2463,11 +2463,19 @@ bool BGTactics::selectObjective(bool reset)
|
|||||||
|
|
||||||
if (bot->GetTeamId() == TEAM_HORDE)
|
if (bot->GetTeamId() == TEAM_HORDE)
|
||||||
{
|
{
|
||||||
bool enemyTowersDown =
|
int towersDestroyed = 0;
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_DUNBALDAR_NORTH).State == POINT_DESTROYED &&
|
if (alterValleyBG->GetAVNodeInfo(BG_AV_NODES_DUNBALDAR_NORTH).State == POINT_DESTROYED)
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_DUNBALDAR_SOUTH).State == POINT_DESTROYED &&
|
++towersDestroyed;
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_ICEWING_BUNKER).State == POINT_DESTROYED &&
|
if (alterValleyBG->GetAVNodeInfo(BG_AV_NODES_DUNBALDAR_SOUTH).State == POINT_DESTROYED)
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_STONEHEART_BUNKER).State == POINT_DESTROYED;
|
++towersDestroyed;
|
||||||
|
if (alterValleyBG->GetAVNodeInfo(BG_AV_NODES_ICEWING_BUNKER).State == POINT_DESTROYED)
|
||||||
|
++towersDestroyed;
|
||||||
|
if (alterValleyBG->GetAVNodeInfo(BG_AV_NODES_STONEHEART_BUNKER).State == POINT_DESTROYED)
|
||||||
|
++towersDestroyed;
|
||||||
|
|
||||||
|
// Now require only 2 to be destroyed
|
||||||
|
bool enemyTowersDown = (towersDestroyed >= 2);
|
||||||
|
|
||||||
// End Boss
|
// End Boss
|
||||||
if (enemyTowersDown &&
|
if (enemyTowersDown &&
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FIRSTAID_STATION).OwnerId != TEAM_ALLIANCE &&
|
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FIRSTAID_STATION).OwnerId != TEAM_ALLIANCE &&
|
||||||
@@ -2652,11 +2660,19 @@ bool BGTactics::selectObjective(bool reset)
|
|||||||
}
|
}
|
||||||
else // TEAM_ALLIANCE
|
else // TEAM_ALLIANCE
|
||||||
{
|
{
|
||||||
bool enemyTowersDown =
|
int towersDestroyed = 0;
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FROSTWOLF_WTOWER).State == POINT_DESTROYED &&
|
if (alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FROSTWOLF_WTOWER).State == POINT_DESTROYED)
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FROSTWOLF_ETOWER).State == POINT_DESTROYED &&
|
++towersDestroyed;
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_TOWER_POINT).State == POINT_DESTROYED &&
|
if (alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FROSTWOLF_ETOWER).State == POINT_DESTROYED)
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_ICEBLOOD_TOWER).State == POINT_DESTROYED;
|
++towersDestroyed;
|
||||||
|
if (alterValleyBG->GetAVNodeInfo(BG_AV_NODES_TOWER_POINT).State == POINT_DESTROYED)
|
||||||
|
++towersDestroyed;
|
||||||
|
if (alterValleyBG->GetAVNodeInfo(BG_AV_NODES_ICEBLOOD_TOWER).State == POINT_DESTROYED)
|
||||||
|
++towersDestroyed;
|
||||||
|
|
||||||
|
// Now require only 2 to be destroyed
|
||||||
|
bool enemyTowersDown = (towersDestroyed >= 2);
|
||||||
|
|
||||||
// End Boss
|
// End Boss
|
||||||
if (enemyTowersDown && alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FROSTWOLF_HUT).OwnerId != TEAM_HORDE &&
|
if (enemyTowersDown && alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FROSTWOLF_HUT).OwnerId != TEAM_HORDE &&
|
||||||
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FROSTWOLF_HUT).TotalOwnerId != TEAM_HORDE)
|
alterValleyBG->GetAVNodeInfo(BG_AV_NODES_FROSTWOLF_HUT).TotalOwnerId != TEAM_HORDE)
|
||||||
@@ -4300,8 +4316,22 @@ bool BGTactics::protectFC()
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
Unit* teamFC = AI_VALUE(Unit*, "team flag carrier");
|
Unit* teamFC = AI_VALUE(Unit*, "team flag carrier");
|
||||||
if (teamFC && bot->IsWithinDistInMap(teamFC, 50.0f))
|
|
||||||
return Follow(teamFC);
|
if (!teamFC || teamFC == bot)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bot->IsInCombat() && !bot->IsWithinDistInMap(teamFC, 20.0f))
|
||||||
|
{
|
||||||
|
// Get the flag carrier's position
|
||||||
|
float fcX = teamFC->GetPositionX();
|
||||||
|
float fcY = teamFC->GetPositionY();
|
||||||
|
float fcZ = teamFC->GetPositionZ();
|
||||||
|
uint32 mapId = bot->GetMapId();
|
||||||
|
|
||||||
|
return MoveNear(mapId, fcX, fcY, fcZ, 5.0f, MovementPriority::MOVEMENT_NORMAL);
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ void WarsongStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
|||||||
new TriggerNode("low mana", NextAction::array(0, new NextAction("bg use buff", 30.0f), nullptr)));
|
new TriggerNode("low mana", NextAction::array(0, new NextAction("bg use buff", 30.0f), nullptr)));
|
||||||
triggers.push_back(new TriggerNode(
|
triggers.push_back(new TriggerNode(
|
||||||
"enemy flagcarrier near", NextAction::array(0, new NextAction("attack enemy flag carrier", 80.0f), nullptr)));
|
"enemy flagcarrier near", NextAction::array(0, new NextAction("attack enemy flag carrier", 80.0f), nullptr)));
|
||||||
|
triggers.push_back(new TriggerNode(
|
||||||
|
"team has flag", NextAction::array(0, new NextAction("bg protect fc", 75.0f), nullptr)));
|
||||||
triggers.push_back(new TriggerNode("player has flag",
|
triggers.push_back(new TriggerNode("player has flag",
|
||||||
NextAction::array(0, new NextAction("bg move to objective", 90.0f), nullptr)));
|
NextAction::array(0, new NextAction("bg move to objective", 90.0f), nullptr)));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user