mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-15 18:00:27 +00:00
Arm warrior and dk
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
#include "SpellMgr.h"
|
||||
#include "UpdateFields.h"
|
||||
|
||||
StatsCollector::StatsCollector(CollectorType type) : type_(type) { Reset(); }
|
||||
StatsCollector::StatsCollector(CollectorType type, int32 cls) : type_(type), cls_(cls) { Reset(); }
|
||||
|
||||
void StatsCollector::Reset()
|
||||
{
|
||||
@@ -243,6 +243,18 @@ bool StatsCollector::SpecialSpellFilter(uint32 spellId) {
|
||||
case 67771: // Death's Verdict (heroic)
|
||||
stats[STATS_TYPE_ATTACK_POWER] += 260;
|
||||
return true;
|
||||
case 71406: // Tiny Abomination in a Jar
|
||||
if (cls_ == CLASS_PALADIN)
|
||||
stats[STATS_TYPE_ATTACK_POWER] += 600;
|
||||
else
|
||||
stats[STATS_TYPE_ATTACK_POWER] += 150;
|
||||
return true;
|
||||
case 71545: // Tiny Abomination in a Jar (heroic)
|
||||
if (cls_ == CLASS_PALADIN)
|
||||
stats[STATS_TYPE_ATTACK_POWER] += 800;
|
||||
else
|
||||
stats[STATS_TYPE_ATTACK_POWER] += 200;
|
||||
return true;
|
||||
case 71519: // Deathbringer's Will
|
||||
stats[STATS_TYPE_ATTACK_POWER] += 350;
|
||||
return true;
|
||||
|
||||
@@ -57,7 +57,7 @@ enum CollectorType : uint8
|
||||
class StatsCollector
|
||||
{
|
||||
public:
|
||||
StatsCollector(CollectorType type);
|
||||
StatsCollector(CollectorType type, int32 cls = -1);
|
||||
StatsCollector(StatsCollector& stats) = default;
|
||||
void Reset();
|
||||
void CollectItemStats(ItemTemplate const* proto);
|
||||
@@ -78,6 +78,7 @@ private:
|
||||
|
||||
private:
|
||||
CollectorType type_;
|
||||
uint32 cls_;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -27,10 +27,10 @@ StatsWeightCalculator::StatsWeightCalculator(Player* player) : player_(player)
|
||||
type_ = CollectorType::MELEE;
|
||||
else
|
||||
type_ = CollectorType::RANGED;
|
||||
collector_ = std::make_unique<StatsCollector>(type_);
|
||||
|
||||
cls = player->getClass();
|
||||
tab = AiFactory::GetPlayerSpecTab(player);
|
||||
collector_ = std::make_unique<StatsCollector>(type_, cls);
|
||||
|
||||
|
||||
if (cls == CLASS_DEATH_KNIGHT && tab == DEATHKNIGHT_TAB_UNHOLY)
|
||||
hitOverflowType_ = CollectorType::SPELL;
|
||||
@@ -128,58 +128,58 @@ void StatsWeightCalculator::GenerateBasicWeights(Player* player)
|
||||
|
||||
if (cls == CLASS_HUNTER && (tab == HUNTER_TAB_BEASTMASTER || tab == HUNTER_TAB_SURVIVAL))
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 2.4f;
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 2.5f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 1.3f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.6f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.5f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.4f;
|
||||
stats_weights_[STATS_TYPE_RANGED_DPS] += 5.0f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 1.5f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.7f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.4f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.6f;
|
||||
stats_weights_[STATS_TYPE_RANGED_DPS] += 7.5f;
|
||||
}
|
||||
else if (cls == CLASS_HUNTER && tab == HUNTER_TAB_MARKSMANSHIP)
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 2.2f;
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 2.3f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 2.2f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 2.25f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 2.0f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.8f;
|
||||
stats_weights_[STATS_TYPE_RANGED_DPS] += 5.0f;
|
||||
stats_weights_[STATS_TYPE_RANGED_DPS] += 10.0f;
|
||||
}
|
||||
else if (cls == CLASS_ROGUE && tab == ROGUE_TAB_COMBAT)
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.8f;
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.9f;
|
||||
stats_weights_[STATS_TYPE_STRENGTH] += 1.1f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 1.2f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 2.0f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.6f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.4f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 1.8f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.4f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.7f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 2.0f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 5.0f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 7.0f;
|
||||
}
|
||||
else if (cls == CLASS_DRUID && tab == DRUID_TAB_FERAL && !PlayerbotAI::IsTank(player))
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 2.4f;
|
||||
stats_weights_[STATS_TYPE_STRENGTH] += 2.3f;
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 2.2f;
|
||||
stats_weights_[STATS_TYPE_STRENGTH] += 2.4f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 2.3f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.9f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.8f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.4f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 2.0f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 5.0f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.5f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 15.0f;
|
||||
}
|
||||
else if (cls == CLASS_ROGUE && (tab == ROGUE_TAB_ASSASSINATION || tab == ROGUE_TAB_SUBTLETY))
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.7f;
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.5f;
|
||||
stats_weights_[STATS_TYPE_STRENGTH] += 1.1f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.6f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.3f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.5f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 2.0f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 1.2f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.1f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.8f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 5.0f;
|
||||
}
|
||||
else if (cls == CLASS_WARRIOR && tab == WARRIOR_TAB_FURY) // fury
|
||||
@@ -208,70 +208,86 @@ void StatsWeightCalculator::GenerateBasicWeights(Player* player)
|
||||
}
|
||||
else if (cls == CLASS_DEATH_KNIGHT && tab == DEATHKNIGHT_TAB_FROST) // frost dk
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.8f;
|
||||
stats_weights_[STATS_TYPE_STRENGTH] += 2.6f;
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.7f;
|
||||
stats_weights_[STATS_TYPE_STRENGTH] += 2.8f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 2.7f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 2.3f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 2.2f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.8f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 2.5f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 7.0f;
|
||||
}
|
||||
else if (cls == CLASS_DEATH_KNIGHT && tab == DEATHKNIGHT_TAB_UNHOLY)
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 0.5f;
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 0.9f;
|
||||
stats_weights_[STATS_TYPE_STRENGTH] += 2.5f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.8f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.4f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.7f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 1.5f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 5.0f;
|
||||
}
|
||||
else if (cls == CLASS_PALADIN && tab == PALADIN_TAB_RETRIBUTION) // retribution
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.3f;
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.6f;
|
||||
stats_weights_[STATS_TYPE_STRENGTH] += 2.5f;
|
||||
stats_weights_[STATS_TYPE_INTELLECT] += 0.15f;
|
||||
stats_weights_[STATS_TYPE_INTELLECT] += 0.1f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_SPELL_POWER] += 0.3f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 0.7f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 1.5f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.9f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.3f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.2f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.7f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.6f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 2.0f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 7.0f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 9.0f;
|
||||
}
|
||||
else if ((cls == CLASS_SHAMAN && tab == SHAMAN_TAB_ENHANCEMENT)) // enhancement
|
||||
{
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.6f;
|
||||
stats_weights_[STATS_TYPE_AGILITY] += 1.4f;
|
||||
stats_weights_[STATS_TYPE_STRENGTH] += 1.1f;
|
||||
stats_weights_[STATS_TYPE_INTELLECT] += 0.5f;
|
||||
stats_weights_[STATS_TYPE_INTELLECT] += 0.3f;
|
||||
stats_weights_[STATS_TYPE_ATTACK_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_SPELL_POWER] += 0.9f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 1.2f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.7f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.4f;
|
||||
stats_weights_[STATS_TYPE_SPELL_POWER] += 0.95f;
|
||||
stats_weights_[STATS_TYPE_ARMOR_PENETRATION] += 0.9f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 2.1f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.5f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.8f;
|
||||
stats_weights_[STATS_TYPE_EXPERTISE] += 2.0f;
|
||||
stats_weights_[STATS_TYPE_MELEE_DPS] += 8.5f;
|
||||
}
|
||||
else if (cls == CLASS_WARLOCK || cls == CLASS_MAGE ||
|
||||
else if (cls == CLASS_WARLOCK || (cls == CLASS_MAGE && tab != MAGE_TAB_FIRE) ||
|
||||
(cls == CLASS_PRIEST && tab == PRIEST_TAB_SHADOW) || // shadow
|
||||
(cls == CLASS_SHAMAN && tab == SHAMAN_TAB_ELEMENTAL) || // element
|
||||
(cls == CLASS_DRUID && tab == DRUID_TAB_BALANCE)) // balance
|
||||
{
|
||||
stats_weights_[STATS_TYPE_INTELLECT] += 0.5f;
|
||||
stats_weights_[STATS_TYPE_SPIRIT] += 0.4f;
|
||||
stats_weights_[STATS_TYPE_INTELLECT] += 0.3f;
|
||||
stats_weights_[STATS_TYPE_SPIRIT] += 0.6f;
|
||||
stats_weights_[STATS_TYPE_SPELL_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_SPELL_PENETRATION] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.1f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 0.8f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_RANGED_DPS] += 1.0f;
|
||||
}
|
||||
else if (cls == CLASS_MAGE && tab == MAGE_TAB_FIRE)
|
||||
{
|
||||
stats_weights_[STATS_TYPE_INTELLECT] += 0.3f;
|
||||
stats_weights_[STATS_TYPE_SPIRIT] += 0.7f;
|
||||
stats_weights_[STATS_TYPE_SPELL_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.2f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 1.1f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 0.8f;
|
||||
stats_weights_[STATS_TYPE_RANGED_DPS] += 1.0f;
|
||||
}
|
||||
else if (cls == CLASS_SHAMAN && tab == SHAMAN_TAB_ELEMENTAL)
|
||||
{
|
||||
stats_weights_[STATS_TYPE_INTELLECT] += 0.25f;
|
||||
stats_weights_[STATS_TYPE_SPELL_POWER] += 1.0f;
|
||||
stats_weights_[STATS_TYPE_HIT] += 1.1f;
|
||||
stats_weights_[STATS_TYPE_CRIT] += 0.8f;
|
||||
stats_weights_[STATS_TYPE_HASTE] += 1.0f;
|
||||
}
|
||||
else if ((cls == CLASS_PALADIN && tab == PALADIN_TAB_HOLY) || // holy
|
||||
(cls == CLASS_PRIEST && tab != PRIEST_TAB_SHADOW) || // discipline / holy
|
||||
(cls == CLASS_SHAMAN && tab == SHAMAN_TAB_RESTORATION) || // heal
|
||||
@@ -349,6 +365,8 @@ void StatsWeightCalculator::GenerateAdditionalWeights(Player* player)
|
||||
{
|
||||
if (player->HasAura(34484))
|
||||
stats_weights_[STATS_TYPE_INTELLECT] += 1.1f;
|
||||
if (player->HasAura(56341))
|
||||
stats_weights_[STATS_TYPE_STAMINA] += 0.3f;
|
||||
}
|
||||
else if (cls == CLASS_WARRIOR)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user