mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-13 09:07:19 +00:00
Improve combat reach and dps target, allowing spell interruption
This commit is contained in:
@@ -50,6 +50,7 @@ public:
|
||||
CasterFindTargetSmartStrategy(PlayerbotAI* botAI, float dps)
|
||||
: FindTargetStrategy(botAI), dps_(dps), targetExpectedLifeTime(1000000)
|
||||
{
|
||||
result = nullptr;
|
||||
}
|
||||
|
||||
void CheckAttacker(Unit* attacker, ThreatMgr* threatMgr) override
|
||||
@@ -86,13 +87,15 @@ public:
|
||||
{
|
||||
float new_time = new_unit->GetHealth() / dps_;
|
||||
float old_time = old_unit->GetHealth() / dps_;
|
||||
// [5-20] > (5-0] > (20-inf)
|
||||
if (GetIntervalLevel(new_unit) > GetIntervalLevel(old_unit))
|
||||
// [5-30] > (5-0] > (20-inf)
|
||||
int new_level = GetIntervalLevel(new_unit);
|
||||
int old_level = GetIntervalLevel(old_unit);
|
||||
if (new_level != old_level)
|
||||
{
|
||||
return true;
|
||||
return new_level > old_level;
|
||||
}
|
||||
int32_t level = GetIntervalLevel(new_unit);
|
||||
if (level % 10 == 2 || level % 10 == 1)
|
||||
int32_t level = new_level;
|
||||
if (level % 10 == 2 || level % 10 == 0)
|
||||
{
|
||||
return new_time < old_time;
|
||||
}
|
||||
@@ -116,15 +119,15 @@ public:
|
||||
botAI->IsRanged(botAI->GetBot()) ? sPlayerbotAIConfig->spellDistance : sPlayerbotAIConfig->meleeDistance;
|
||||
attackRange += 5.0f;
|
||||
int level = dis < attackRange ? 10 : 0;
|
||||
if (time >= 3 && time <= 20)
|
||||
if (time >= 5 && time <= 30)
|
||||
{
|
||||
return level + 2;
|
||||
}
|
||||
if (time > 20)
|
||||
if (time > 30)
|
||||
{
|
||||
return level + 1;
|
||||
return level;
|
||||
}
|
||||
return level;
|
||||
return level + 1;
|
||||
}
|
||||
|
||||
protected:
|
||||
@@ -176,12 +179,14 @@ public:
|
||||
float new_time = new_unit->GetHealth() / dps_;
|
||||
float old_time = old_unit->GetHealth() / dps_;
|
||||
// [5-20] > (5-0] > (20-inf)
|
||||
if (GetIntervalLevel(new_unit) > GetIntervalLevel(old_unit))
|
||||
int new_level = GetIntervalLevel(new_unit);
|
||||
int old_level = GetIntervalLevel(old_unit);
|
||||
if (new_level != old_level)
|
||||
{
|
||||
return true;
|
||||
return new_level > old_level;
|
||||
}
|
||||
// attack enemy in range and with lowest health
|
||||
int level = GetIntervalLevel(new_unit);
|
||||
int level = new_level;
|
||||
if (level == 10)
|
||||
{
|
||||
return new_time < old_time;
|
||||
@@ -249,12 +254,14 @@ public:
|
||||
float new_time = new_unit->GetHealth() / dps_;
|
||||
float old_time = old_unit->GetHealth() / dps_;
|
||||
// [5-20] > (5-0] > (20-inf)
|
||||
if (GetIntervalLevel(new_unit) > GetIntervalLevel(old_unit))
|
||||
int new_level = GetIntervalLevel(new_unit);
|
||||
int old_level = GetIntervalLevel(old_unit);
|
||||
if (new_level != old_level)
|
||||
{
|
||||
return true;
|
||||
return new_level > old_level;
|
||||
}
|
||||
// attack enemy in range and with lowest health
|
||||
int level = GetIntervalLevel(new_unit);
|
||||
int level = new_level;
|
||||
Player* bot = botAI->GetBot();
|
||||
if (level == 10)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user