dps estimation

This commit is contained in:
Yunfan Li
2023-10-10 23:23:52 +08:00
parent 451ec93e92
commit 417c5bbc93
6 changed files with 52 additions and 20 deletions

View File

@@ -152,7 +152,7 @@ NextAction** BearTankDruidStrategy::getDefaultActions()
void BearTankDruidStrategy::InitTriggers(std::vector<TriggerNode*> &triggers)
{
FeralDruidStrategy::InitTriggers(triggers);
triggers.push_back(new TriggerNode("enemy out of melee", NextAction::array(0, new NextAction("feral charge - bear", ACTION_MOVE + 8), nullptr)));
triggers.push_back(new TriggerNode("enemy out of melee", NextAction::array(0, new NextAction("feral charge - bear", ACTION_NORMAL + 8), nullptr)));
triggers.push_back(new TriggerNode("thorns", NextAction::array(0, new NextAction("thorns", ACTION_HIGH + 9), nullptr)));
triggers.push_back(new TriggerNode("bear form", NextAction::array(0, new NextAction("dire bear form", ACTION_HIGH + 8), nullptr)));
triggers.push_back(new TriggerNode("faerie fire (feral)", NextAction::array(0, new NextAction("faerie fire (feral)", ACTION_HIGH + 7), nullptr)));

View File

@@ -10,7 +10,7 @@ void MeleeCombatStrategy::InitTriggers(std::vector<TriggerNode*> &triggers)
CombatStrategy::InitTriggers(triggers);
// triggers.push_back(new TriggerNode("not facing target", NextAction::array(0, new NextAction("set facing", ACTION_MOVE + 7), nullptr)));
triggers.push_back(new TriggerNode("enemy out of melee", NextAction::array(0, new NextAction("reach melee", ACTION_MOVE + 8), nullptr)));
triggers.push_back(new TriggerNode("enemy out of melee", NextAction::array(0, new NextAction("reach melee", ACTION_NORMAL + 8), nullptr)));
// triggers.push_back(new TriggerNode("enemy too close for melee", NextAction::array(0, new NextAction("move out of enemy contact", ACTION_NORMAL + 8), nullptr)));
}

View File

@@ -1,4 +1,6 @@
#include "ExpectedLifetimeValue.h"
#include "AiFactory.h"
#include "PlayerbotAI.h"
#include "Playerbots.h"
#include "SharedDefines.h"
@@ -23,22 +25,44 @@ float ExpectedGroupDpsValue::Calculate()
} else {
dps_num = group->GetMembersCount() * 0.7;
}
uint32 mixedGearScore = PlayerbotAI::GetMixedGearScore(bot, false, false, 12);
// efficiency record based on rare gear level, is there better calculation method?
float dps_efficiency = 1;
if (bot->GetLevel() < 30) {
dps_efficiency = 1.5;
} else if (bot->GetLevel() < 40) {
dps_efficiency = 2;
} else if (bot->GetLevel() < 50) {
dps_efficiency = 3;
} else if (bot->GetLevel() < 60) {
dps_efficiency = 4;
} else if (bot->GetLevel() < 70) {
dps_efficiency = 7;
} else if (bot->GetLevel() < 80) {
dps_efficiency = 12;
// float dps_efficiency = 1;
float basic_dps;
int32 basic_gs;
int32 level = bot->GetLevel();
if (level <= 15) {
basic_dps = 5 + level * 1;
} else if (level <= 30) {
basic_dps = 20 + (level - 15) * 2;
} else if (level <= 40) {
basic_dps = 50 + (level - 30) * 3;
} else if (level <= 55) {
basic_dps = 80 + (level - 45) * 8;
} else if (level <= 60) {
basic_dps = 200 + (level - 55) * 30;
} else if (level <= 70) {
basic_dps = 350 + (level - 60) * 40;
} else {
dps_efficiency = 25;
basic_dps = 750 + (level - 70) * 100;
}
return dps_num * bot->GetLevel() * dps_efficiency;
if (level <= 8) {
basic_gs = (level + 5) * 2;
} else if (level <= 15) {
basic_gs = (level + 5) * 3;
} else if (level <= 60) {
basic_gs = (level + 5) * 4;
} else if (level <= 70) {
basic_gs = (85 + (level - 60) * 3) * 4;
} else if (level <= 80) {
basic_gs = (155 + (level - 70) * 4) * 4;
}
float gs_modifier = (float)mixedGearScore / basic_gs;
if (gs_modifier < 0.5) gs_modifier = 0.5;
if (gs_modifier > 3) gs_modifier = 3;
return dps_num * basic_dps * gs_modifier;
}