[Cleanup] Cleanup classes.cpp/classes.h (#3752)

* [Cleanup] Cleanup classes.cpp/classes.h

# Notes
- Remove unused methods and cleanup logic.

* Update classes.cpp

* Final push.
This commit is contained in:
Alex King
2023-12-13 18:38:45 -05:00
committed by GitHub
parent df83113cea
commit aeeb350068
49 changed files with 1308 additions and 1486 deletions
+150 -150
View File
@@ -78,10 +78,10 @@ Bot::Bot(NPCType *npcTypeData, Client* botOwner) : NPC(npcTypeData, nullptr, glm
SetBotCharmer(false);
SetPetChooser(false);
SetRangerAutoWeaponSelect(false);
SetTaunting(GetClass() == WARRIOR || GetClass() == PALADIN || GetClass() == SHADOWKNIGHT);
SetTaunting(GetClass() == Class::Warrior || GetClass() == Class::Paladin || GetClass() == Class::ShadowKnight);
SetDefaultBotStance();
SetAltOutOfCombatBehavior(GetClass() == BARD); // will need to be updated if more classes make use of this flag
SetAltOutOfCombatBehavior(GetClass() == Class::Bard); // will need to be updated if more classes make use of this flag
SetShowHelm(true);
SetPauseAI(false);
@@ -201,7 +201,7 @@ Bot::Bot(
);
}
SetTaunting((GetClass() == WARRIOR || GetClass() == PALADIN || GetClass() == SHADOWKNIGHT) && (GetBotStance() == EQ::constants::stanceAggressive));
SetTaunting((GetClass() == Class::Warrior || GetClass() == Class::Paladin || GetClass() == Class::ShadowKnight) && (GetBotStance() == EQ::constants::stanceAggressive));
SetPauseAI(false);
m_alt_combat_hate_timer.Start(250);
@@ -241,7 +241,7 @@ Bot::Bot(
for (int i = 0; i < MaxTimer; i++)
timers[i] = 0;
if (GetClass() == ROGUE) {
if (GetClass() == Class::Rogue) {
m_evade_timer.Start();
}
@@ -561,7 +561,7 @@ uint32 Bot::GetBotArcheryRange() {
}
void Bot::ChangeBotArcherWeapons(bool isArcher) {
if ((GetClass()==WARRIOR) || (GetClass()==PALADIN) || (GetClass()==RANGER) || (GetClass()==SHADOWKNIGHT) || (GetClass()==ROGUE)) {
if ((GetClass()==Class::Warrior) || (GetClass()==Class::Paladin) || (GetClass()==Class::Ranger) || (GetClass()==Class::ShadowKnight) || (GetClass()==Class::Rogue)) {
if (!isArcher) {
BotAddEquipItem(EQ::invslot::slotPrimary, GetBotItemBySlot(EQ::invslot::slotPrimary));
BotAddEquipItem(EQ::invslot::slotSecondary, GetBotItemBySlot(EQ::invslot::slotSecondary));
@@ -769,7 +769,7 @@ void Bot::GenerateBaseStats()
// pulling fixed values from an auto-increment field is dangerous...
switch (GetClass()) {
case WARRIOR:
case Class::Warrior:
BotSpellID = 3001;
Strength += 10;
Stamina += 20;
@@ -777,7 +777,7 @@ void Bot::GenerateBaseStats()
Dexterity += 10;
Attack += 12;
break;
case CLERIC:
case Class::Cleric:
BotSpellID = 3002;
Strength += 5;
Stamina += 5;
@@ -785,7 +785,7 @@ void Bot::GenerateBaseStats()
Wisdom += 30;
Attack += 8;
break;
case PALADIN:
case Class::Paladin:
BotSpellID = 3003;
Strength += 15;
Stamina += 5;
@@ -794,7 +794,7 @@ void Bot::GenerateBaseStats()
Dexterity += 5;
Attack += 17;
break;
case RANGER:
case Class::Ranger:
BotSpellID = 3004;
Strength += 15;
Stamina += 10;
@@ -802,7 +802,7 @@ void Bot::GenerateBaseStats()
Wisdom += 15;
Attack += 17;
break;
case SHADOWKNIGHT:
case Class::ShadowKnight:
BotSpellID = 3005;
Strength += 10;
Stamina += 15;
@@ -810,13 +810,13 @@ void Bot::GenerateBaseStats()
Charisma += 5;
Attack += 17;
break;
case DRUID:
case Class::Druid:
BotSpellID = 3006;
Stamina += 15;
Wisdom += 35;
Attack += 5;
break;
case MONK:
case Class::Monk:
BotSpellID = 3007;
Strength += 5;
Stamina += 15;
@@ -824,7 +824,7 @@ void Bot::GenerateBaseStats()
Dexterity += 15;
Attack += 17;
break;
case BARD:
case Class::Bard:
BotSpellID = 3008;
Strength += 15;
Dexterity += 10;
@@ -832,7 +832,7 @@ void Bot::GenerateBaseStats()
Intelligence += 10;
Attack += 17;
break;
case ROGUE:
case Class::Rogue:
BotSpellID = 3009;
Strength += 10;
Stamina += 20;
@@ -840,39 +840,39 @@ void Bot::GenerateBaseStats()
Dexterity += 10;
Attack += 12;
break;
case SHAMAN:
case Class::Shaman:
BotSpellID = 3010;
Stamina += 10;
Wisdom += 30;
Charisma += 10;
Attack += 28;
break;
case NECROMANCER:
case Class::Necromancer:
BotSpellID = 3011;
Dexterity += 10;
Agility += 10;
Intelligence += 30;
Attack += 5;
break;
case WIZARD:
case Class::Wizard:
BotSpellID = 3012;
Stamina += 20;
Intelligence += 30;
Attack += 5;
break;
case MAGICIAN:
case Class::Magician:
BotSpellID = 3013;
Stamina += 20;
Intelligence += 30;
Attack += 5;
break;
case ENCHANTER:
case Class::Enchanter:
BotSpellID = 3014;
Intelligence += 25;
Charisma += 25;
Attack += 5;
break;
case BEASTLORD:
case Class::Beastlord:
BotSpellID = 3015;
Stamina += 10;
Agility += 10;
@@ -881,7 +881,7 @@ void Bot::GenerateBaseStats()
Charisma += 5;
Attack += 31;
break;
case BERSERKER:
case Class::Berserker:
BotSpellID = 3016;
Strength += 10;
Stamina += 15;
@@ -1497,7 +1497,7 @@ bool Bot::LoadPet()
if (!bot_owner)
return false;
if (GetClass() == WIZARD) {
if (GetClass() == Class::Wizard) {
auto buffs_max = GetMaxBuffSlots();
auto my_buffs = GetBuffs();
if (buffs_max && my_buffs) {
@@ -1799,7 +1799,7 @@ void Bot::AI_Bot_Init()
void Bot::SpellProcess() {
if (spellend_timer.Check(false)) {
NPC::SpellProcess();
if (GetClass() == BARD && casting_spell_id != 0) casting_spell_id = 0;
if (GetClass() == Class::Bard && casting_spell_id != 0) casting_spell_id = 0;
}
}
@@ -1891,7 +1891,7 @@ bool Bot::CheckBotDoubleAttack(bool tripleAttack) {
//Check for bonuses that give you a double attack chance regardless of skill (ie Bestial Frenzy/Harmonious Attack AA)
uint32 bonusGiveDA = (aabonuses.GiveDoubleAttack + spellbonuses.GiveDoubleAttack + itembonuses.GiveDoubleAttack);
// If you don't have the double attack skill, return
if (!GetSkill(EQ::skills::SkillDoubleAttack) && !(GetClass() == BARD || GetClass() == BEASTLORD))
if (!GetSkill(EQ::skills::SkillDoubleAttack) && !(GetClass() == Class::Bard || GetClass() == Class::Beastlord))
return false;
// You start with no chance of double attacking
@@ -1941,7 +1941,7 @@ void Bot::SetGuardMode() {
m_GuardPoint = GetPosition();
SetGuardFlag();
if (HasPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
if (HasPet() && (GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
GetPet()->StopMoving();
}
}
@@ -1953,7 +1953,7 @@ void Bot::SetHoldMode() {
// AI Processing for the Bot object
constexpr float MAX_CASTER_DISTANCE[PLAYER_CLASS_COUNT] = {
constexpr float MAX_CASTER_DISTANCE[Class::PLAYER_CLASS_COUNT] = {
0,
(34 * 34),
(24 * 24),
@@ -2111,7 +2111,7 @@ void Bot::AI_Process()
}
// This causes conflicts with default pet handler (bounces between targets)
if (NOT_PULLING_BOT && HasPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
if (NOT_PULLING_BOT && HasPet() && (GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
// We don't add to hate list here because it's assumed to already be on the list
GetPet()->SetTarget(tar);
@@ -2156,7 +2156,7 @@ void Bot::AI_Process()
return;
}
if (AI_movement_timer->Check() && (!spellend_timer.Enabled() || GetClass() == BARD)) {
if (AI_movement_timer->Check() && (!spellend_timer.Enabled() || GetClass() == Class::Bard)) {
if (TryEvade(tar)) {
return;
@@ -2228,7 +2228,7 @@ void Bot::AI_Process()
SetTarget(nullptr);
if (HasPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 1)) {
if (HasPet() && (GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 1)) {
GetPet()->WipeHateList();
GetPet()->SetTarget(nullptr);
@@ -2255,7 +2255,7 @@ void Bot::AI_Process()
bool Bot::TryBardMovementCasts() {// Basically, bard bots get a chance to cast idle spells while moving
if (GetClass() == BARD && IsMoving() && NOT_PASSIVE && !spellend_timer.Enabled() && AI_think_timer->Check()) {
if (GetClass() == Class::Bard && IsMoving() && NOT_PASSIVE && !spellend_timer.Enabled() && AI_think_timer->Check()) {
AI_IdleCastCheck();
return true;
@@ -2265,7 +2265,7 @@ bool Bot::TryBardMovementCasts() {// Basically, bard bots get a chance to cast i
bool Bot::TryNonCombatMovementChecks(Client* bot_owner, const Mob* follow_mob, glm::vec3& Goal) {// Non-engaged movement checks
if (AI_movement_timer->Check() && (!IsCasting() || GetClass() == BARD)) {
if (AI_movement_timer->Check() && (!IsCasting() || GetClass() == Class::Bard)) {
if (GUARDING) {
Goal = GetGuardPoint();
}
@@ -2311,12 +2311,12 @@ bool Bot::TryIdleChecks(float fm_distance) {
if (NOT_PASSIVE) {
if (!AI_IdleCastCheck() && !IsCasting() && GetClass() != BARD) {
if (!AI_IdleCastCheck() && !IsCasting() && GetClass() != Class::Bard) {
BotMeditate(true);
}
} else {
if (GetClass() != BARD) {
if (GetClass() != Class::Bard) {
BotMeditate(true);
}
@@ -2363,7 +2363,7 @@ bool Bot::TryAutoDefend(Client* bot_owner, float leash_distance) {
SetTarget(hater);
SetAttackingFlag();
if (HasPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
if (HasPet() && (GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
GetPet()->AddToHateList(hater, 1);
GetPet()->SetTarget(hater);
}
@@ -2399,7 +2399,7 @@ bool Bot::TryMeditate() {
// This code actually gets processed when we are too far away from target and have not engaged yet
bool Bot::TryPursueTarget(float leash_distance, glm::vec3& Goal) {
if (AI_movement_timer->Check() && (!spellend_timer.Enabled() || GetClass() == BARD)) {
if (AI_movement_timer->Check() && (!spellend_timer.Enabled() || GetClass() == Class::Bard)) {
if (GetTarget() && !IsRooted()) {
LogAIDetail("Pursuing [{}] while engaged", GetTarget()->GetCleanName());
Goal = GetTarget()->GetPosition();
@@ -2410,7 +2410,7 @@ bool Bot::TryPursueTarget(float leash_distance, glm::vec3& Goal) {
WipeHateList();
SetTarget(nullptr);
if (HasPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
if (HasPet() && (GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
GetPet()->WipeHateList();
GetPet()->SetTarget(nullptr);
}
@@ -2446,7 +2446,7 @@ bool Bot::TrySecondaryWeaponAttacks(Mob* tar, const EQ::ItemInstance* s_item) {
const EQ::ItemData* s_itemdata = nullptr;
// Can only dual wield without a weapon if you're a monk
if (s_item || (GetClass() == MONK)) {
if (s_item || (GetClass() == Class::Monk)) {
if (s_item) {
s_itemdata = s_item->GetItem();
@@ -2597,7 +2597,7 @@ bool Bot::TryEvade(Mob* tar) {
HasTargetReflection() &&
!tar->IsFeared() &&
!tar->IsStunned() &&
GetClass() == ROGUE &&
GetClass() == Class::Rogue &&
m_evade_timer.Check(false)
) {
int timer_duration = (HideReuseTime - GetSkillReuseTime(EQ::skills::SkillHide)) * 1000;
@@ -2623,7 +2623,7 @@ void Bot::CheckCombatRange(Mob* tar, float tar_distance, bool& atCombatRange, co
s_item= GetBotItem(EQ::invslot::slotSecondary);
bool behind_mob = false;
bool backstab_weapon = false;
if (GetClass() == ROGUE) {
if (GetClass() == Class::Rogue) {
behind_mob = BehindMob(tar, GetX(), GetY()); // Can be separated for other future use
backstab_weapon = p_item && p_item->GetItemBackstabDamage();
@@ -2721,9 +2721,9 @@ void Bot::CalcMeleeDistances(const Mob* tar, const EQ::ItemInstance* const& p_it
melee_distance_max = size_mod;
switch (GetClass()) {
case WARRIOR:
case PALADIN:
case SHADOWKNIGHT:
case Class::Warrior:
case Class::Paladin:
case Class::ShadowKnight:
if (p_item && p_item->GetItem()->IsType2HWeapon()) {
melee_distance = melee_distance_max * 0.45f;
}
@@ -2734,10 +2734,10 @@ void Bot::CalcMeleeDistances(const Mob* tar, const EQ::ItemInstance* const& p_it
melee_distance = melee_distance_max * 0.40f;
}
break;
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
case Class::Necromancer:
case Class::Wizard:
case Class::Magician:
case Class::Enchanter:
if (p_item && p_item->GetItem()->IsType2HWeapon()) {
melee_distance = melee_distance_max * 0.95f;
}
@@ -2745,7 +2745,7 @@ void Bot::CalcMeleeDistances(const Mob* tar, const EQ::ItemInstance* const& p_it
melee_distance = melee_distance_max * 0.75f;
}
break;
case ROGUE:
case Class::Rogue:
if (behind_mob && backstab_weapon) {
if (p_item->GetItem()->IsType2HWeapon()) {
melee_distance = melee_distance_max * 0.30f;
@@ -2860,7 +2860,7 @@ void Bot::AcquireBotTarget(Group* bot_group, Raid* raid, Client* leash_owner, fl
if (
HasPet() &&
(
GetClass() != ENCHANTER ||
GetClass() != Class::Enchanter ||
GetPet()->GetPetType() != petAnimation ||
GetAA(aaAnimationEmpathy) >= 2
)
@@ -2880,7 +2880,7 @@ void Bot::AcquireBotTarget(Group* bot_group, Raid* raid, Client* leash_owner, fl
if (
HasPet() &&
(
GetClass() != ENCHANTER ||
GetClass() != Class::Enchanter ||
GetPet()->GetPetType() != petAnimation ||
GetAA(aaAnimationEmpathy) >= 1
)
@@ -2962,7 +2962,7 @@ bool Bot::PullingFlagChecks(Client* bot_owner) {
SetReturningFlag();
if (HasPet() &&
(GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 1)) {
(GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 1)) {
GetPet()->WipeHateList();
GetPet()->SetTarget(nullptr);
@@ -3058,7 +3058,7 @@ bool Bot::CheckIfCasting(float fm_distance) {
AdvanceHealRotation(false);
return true;
}
else if (GetClass() != BARD) {
else if (GetClass() != Class::Bard) {
if (IsEngaged()) {
return true;
@@ -3104,7 +3104,7 @@ bool Bot::CheckIfIncapacitated() {
}
void Bot::SetBerserkState() {// Berserk updates should occur if primary AI criteria are met
if (GetClass() == WARRIOR || GetClass() == BERSERKER) {
if (GetClass() == Class::Warrior || GetClass() == Class::Berserker) {
if (!berserk && GetHP() > 0 && GetHPRatio() < 30.0f) {
entity_list.MessageCloseString(this, false, 200, 0, BERSERK_START, GetName());
@@ -3159,7 +3159,7 @@ void Bot::SetLeashOwnerTarget(Client* leash_owner, Client* bot_owner, float lo_d
IsAttackAllowed(lo_target))
{
AddToHateList(lo_target, 1);
if (HasPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
if (HasPet() && (GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
GetPet()->AddToHateList(lo_target, 1);
GetPet()->SetTarget(lo_target);
}
@@ -3188,7 +3188,7 @@ void Bot::SetOwnerTarget(Client* bot_owner) {
AddToHateList(attack_target, 1);
SetTarget(attack_target);
SetAttackingFlag();
if (GetPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
if (GetPet() && (GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
GetPet()->WipeHateList();
GetPet()->AddToHateList(attack_target, 1);
GetPet()->SetTarget(attack_target);
@@ -3227,7 +3227,7 @@ void Bot::BotPullerProcess(Client* bot_owner, Raid* raid) {
SetTarget(pull_target);
SetPullingFlag();
bot_owner->SetBotPulling();
if (HasPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 1)) {
if (HasPet() && (GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 1)) {
GetPet()->WipeHateList();
GetPet()->SetTarget(nullptr);
@@ -3247,7 +3247,7 @@ void Bot::SetBotGroupTarget(const Client* bot_owner, Client* leash_owner, float
IsAttackAllowed(bgm_target))
{
AddToHateList(bgm_target, 1);
if (HasPet() && (GetClass() != ENCHANTER || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
if (HasPet() && (GetClass() != Class::Enchanter || GetPet()->GetPetType() != petAnimation || GetAA(aaAnimationEmpathy) >= 2)) {
GetPet()->AddToHateList(bgm_target, 1);
GetPet()->SetTarget(bgm_target);
}
@@ -3544,7 +3544,7 @@ void Bot::LoadAndSpawnAllZonedBots(Client* bot_owner) {
std::vector<int> bot_class_spawn_limits;
std::vector<int> bot_class_spawned_count = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
for (uint8 class_id = WARRIOR; class_id <= BERSERKER; class_id++) {
for (uint8 class_id = Class::Warrior; class_id <= Class::Berserker; class_id++) {
auto bot_class_limit = bot_owner->GetBotSpawnLimit(class_id);
bot_class_spawn_limits.push_back(bot_class_limit);
}
@@ -4731,13 +4731,13 @@ int Bot::GetHandToHandDamage(void) {
7, 7, 7, 8, 8, 8, 8, 8, 8, 9, // 21-30
9, 9, 9, 9, 9, 10, 10, 10, 10, 10, // 31-40
10, 11, 11, 11, 11, 11, 11, 12, 12}; // 41-49
if (GetClass() == MONK) {
if (GetClass() == Class::Monk) {
if (CastToNPC()->GetEquippedItemFromTextureSlot(EQ::textures::armorHands) == 10652 && GetLevel() > 50)
return 9;
if (level > 62)
return 15;
return mnk_dmg[level];
} else if (GetClass() == BEASTLORD) {
} else if (GetClass() == Class::Beastlord) {
if (level > 49)
return 13;
return bst_dmg[level];
@@ -4783,7 +4783,7 @@ void Bot::DoRiposte(Mob* defender) {
DoubleRipChance = defender->GetAABonuses().GiveDoubleRiposte[1];
if (DoubleRipChance && (DoubleRipChance >= zone->random.Int(0, 100))) {
if (defender->GetClass() == MONK)
if (defender->GetClass() == Class::Monk)
defender->MonkSpecialAttack(this, defender->GetAABonuses().GiveDoubleRiposte[2]);
else if (defender->IsBot())
defender->CastToClient()->DoClassAttacks(this,defender->GetAABonuses().GiveDoubleRiposte[2], true);
@@ -5044,13 +5044,13 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
if (ka_time) {
switch (GetClass()) {
case SHADOWKNIGHT: {
case Class::ShadowKnight: {
CastSpell(SPELL_NPC_HARM_TOUCH, target->GetID());
knightattack_timer.Start(HarmTouchReuseTime * 1000);
break;
}
case PALADIN: {
case Class::Paladin: {
if (GetHPRatio() < 20) {
CastSpell(SPELL_LAY_ON_HANDS, GetID());
knightattack_timer.Start(LayOnHandsReuseTime * 1000);
@@ -5083,7 +5083,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
if (ma_time) {
switch (GetClass()) {
case MONK: {
case Class::Monk: {
int reuse = (MonkSpecialAttack(target, EQ::skills::SkillTigerClaw) - 1);
// Live AA - Technique of Master Wu
@@ -5148,7 +5148,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
int reuse = (TauntReuseTime * 1000); // Same as Bash and Kick
bool did_attack = false;
switch (GetClass()) {
case WARRIOR:
case Class::Warrior:
if (bot_level >= RuleI(Combat, NPCBashKickLevel)) {
bool canBash = false;
if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQ::invslot::slotSecondary) && m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield) || (m_inv.GetItem(EQ::invslot::slotPrimary) && m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1))
@@ -5159,22 +5159,22 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
else
skill_to_use = EQ::skills::SkillBash;
}
case RANGER:
case BEASTLORD:
case Class::Ranger:
case Class::Beastlord:
skill_to_use = EQ::skills::SkillKick;
break;
case BERSERKER:
case Class::Berserker:
skill_to_use = EQ::skills::SkillFrenzy;
break;
case CLERIC:
case SHADOWKNIGHT:
case PALADIN:
case Class::Cleric:
case Class::ShadowKnight:
case Class::Paladin:
if (bot_level >= RuleI(Combat, NPCBashKickLevel)) {
if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQ::invslot::slotSecondary) && m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield) || (m_inv.GetItem(EQ::invslot::slotPrimary) && m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1))
skill_to_use = EQ::skills::SkillBash;
}
break;
case MONK:
case Class::Monk:
if (GetLevel() >= 30) {
skill_to_use = EQ::skills::SkillFlyingKick;
}
@@ -5192,7 +5192,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
}
break;
case ROGUE:
case Class::Rogue:
skill_to_use = EQ::skills::SkillBackstab;
break;
}
@@ -5600,7 +5600,7 @@ bool Bot::CastSpell(
ZeroCastingVars();
}
if (GetClass() != BARD) {
if (GetClass() != Class::Bard) {
if (
!IsValidSpell(spell_id) ||
casting_spell_id ||
@@ -5753,7 +5753,7 @@ bool Bot::DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_ce
bool Bot::DoCastSpell(uint16 spell_id, uint16 target_id, EQ::spells::CastingSlot slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, uint32 aa_id) {
bool Result = false;
if (GetClass() == BARD)
if (GetClass() == Class::Bard)
cast_time = 0;
Result = Mob::DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, aa_id);
@@ -5851,7 +5851,7 @@ int32 Bot::GenerateBaseManaPoints() {
}
void Bot::GenerateSpecialAttacks() {
if (((GetClass() == MONK) || (GetClass() == WARRIOR) || (GetClass() == RANGER) || (GetClass() == BERSERKER)) && (GetLevel() >= 60))
if (((GetClass() == Class::Monk) || (GetClass() == Class::Warrior) || (GetClass() == Class::Ranger) || (GetClass() == Class::Berserker)) && (GetLevel() >= 60))
SetSpecialAbility(SPECATK_TRIPLE, 1);
}
@@ -5874,7 +5874,7 @@ bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQ::spe
bool spellequal = (j == thespell);
bool spelltypeequal = ((spelltype == 2) || (spelltype == 16) || (spelltype == 32));
bool spelltypetargetequal = ((spelltype == 8) && (spells[thespell].target_type == ST_Self));
bool spelltypeclassequal = ((spelltype == 1024) && (GetClass() == SHAMAN));
bool spelltypeclassequal = ((spelltype == 1024) && (GetClass() == Class::Shaman));
bool slotequal = (slot == EQ::spells::CastingSlot::Item);
if (spellequal || slotequal) {
if ((spelltypeequal || spelltypetargetequal) || spelltypeclassequal || slotequal) {
@@ -5896,7 +5896,7 @@ bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQ::spe
if (g) {
for (int i = 0; i < MAX_GROUP_MEMBERS; i++) {
if (g->members[i]) {
if ((g->members[i]->GetClass() == NECROMANCER) && (IsEffectInSpell(thespell, SE_AbsorbMagicAtt) || IsEffectInSpell(thespell, SE_Rune))) {
if ((g->members[i]->GetClass() == Class::Necromancer) && (IsEffectInSpell(thespell, SE_AbsorbMagicAtt) || IsEffectInSpell(thespell, SE_Rune))) {
}
else
SpellOnTarget(thespell, g->members[i]);
@@ -5917,7 +5917,7 @@ bool Bot::DoFinishedSpellGroupTarget(uint16 spell_id, Mob* spellTarget, EQ::spel
bool isMainGroupMGB = false;
Raid* raid = entity_list.GetRaidByBotName(GetName());
if (isMainGroupMGB && (GetClass() != BARD)) {
if (isMainGroupMGB && (GetClass() != Class::Bard)) {
BotGroupSay(
this,
fmt::format(
@@ -6201,7 +6201,7 @@ int32 Bot::CalcCHA() {
int32 Bot::CalcMR() {
MR += (itembonuses.MR + spellbonuses.MR + aabonuses.MR);
if (GetClass() == WARRIOR)
if (GetClass() == Class::Warrior)
MR += (GetLevel() / 2);
if (MR < 1)
@@ -6215,7 +6215,7 @@ int32 Bot::CalcMR() {
int32 Bot::CalcFR() {
int c = GetClass();
if (c == RANGER) {
if (c == Class::Ranger) {
FR += 4;
int l = GetLevel();
if (l > 49)
@@ -6235,12 +6235,12 @@ int32 Bot::CalcFR() {
int32 Bot::CalcDR() {
int c = GetClass();
if (c == PALADIN) {
if (c == Class::Paladin) {
DR += 8;
int l = GetLevel();
if (l > 49)
DR += (l - 49);
} else if (c == SHADOWKNIGHT) {
} else if (c == Class::ShadowKnight) {
DR += 4;
int l = GetLevel();
if (l > 49)
@@ -6259,12 +6259,12 @@ int32 Bot::CalcDR() {
int32 Bot::CalcPR() {
int c = GetClass();
if (c == ROGUE) {
if (c == Class::Rogue) {
PR += 8;
int l = GetLevel();
if (l > 49)
PR += (l - 49);
} else if (c == SHADOWKNIGHT) {
} else if (c == Class::ShadowKnight) {
PR += 4;
int l = GetLevel();
if (l > 49)
@@ -6284,7 +6284,7 @@ int32 Bot::CalcPR() {
int32 Bot::CalcCR() {
int c = GetClass();
if (c == RANGER) {
if (c == Class::Ranger) {
CR += 4;
int l = GetLevel();
if (l > 49)
@@ -6401,7 +6401,7 @@ int64 Bot::CalcManaRegen() {
int32 regen = 0;
if (IsSitting()) {
BuffFadeBySitModifier();
if (botclass != WARRIOR && botclass != MONK && botclass != ROGUE && botclass != BERSERKER) {
if (botclass != Class::Warrior && botclass != Class::Monk && botclass != Class::Rogue && botclass != Class::Berserker) {
regen = ((((GetSkill(EQ::skills::SkillMeditate) / 10) + (level - (level / 4))) / 4) + 4);
regen += (spellbonuses.ManaRegen + itembonuses.ManaRegen);
} else
@@ -6423,25 +6423,25 @@ int64 Bot::CalcManaRegen() {
uint64 Bot::GetClassHPFactor() {
uint32 factor;
switch (GetClass()) {
case BEASTLORD:
case BERSERKER:
case MONK:
case ROGUE:
case SHAMAN:
case Class::Beastlord:
case Class::Berserker:
case Class::Monk:
case Class::Rogue:
case Class::Shaman:
factor = 255;
break;
case BARD:
case CLERIC:
case Class::Bard:
case Class::Cleric:
factor = 264;
break;
case SHADOWKNIGHT:
case PALADIN:
case Class::ShadowKnight:
case Class::Paladin:
factor = 288;
break;
case RANGER:
case Class::Ranger:
factor = 276;
break;
case WARRIOR:
case Class::Warrior:
factor = 300;
break;
default:
@@ -6682,46 +6682,46 @@ void Bot::UpdateGroupCastingRoles(const Group* group, bool disband)
// GroupHealer
switch (iter->GetClass()) {
case CLERIC:
case Class::Cleric:
if (!healer)
healer = iter;
else
switch (healer->GetClass()) {
case CLERIC:
case Class::Cleric:
break;
default:
healer = iter;
}
break;
case DRUID:
case Class::Druid:
if (!healer)
healer = iter;
else
switch (healer->GetClass()) {
case CLERIC:
case DRUID:
case Class::Cleric:
case Class::Druid:
break;
default:
healer = iter;
}
break;
case SHAMAN:
case Class::Shaman:
if (!healer)
healer = iter;
else
switch (healer->GetClass()) {
case CLERIC:
case DRUID:
case SHAMAN:
case Class::Cleric:
case Class::Druid:
case Class::Shaman:
break;
default:
healer = iter;
}
break;
case PALADIN:
case RANGER:
case BEASTLORD:
case Class::Paladin:
case Class::Ranger:
case Class::Beastlord:
if (!healer)
healer = iter;
break;
@@ -6731,30 +6731,30 @@ void Bot::UpdateGroupCastingRoles(const Group* group, bool disband)
// GroupSlower
switch (iter->GetClass()) {
case SHAMAN:
case Class::Shaman:
if (!slower)
slower = iter;
else
switch (slower->GetClass()) {
case SHAMAN:
case Class::Shaman:
break;
default:
slower = iter;
}
break;
case ENCHANTER:
case Class::Enchanter:
if (!slower)
slower = iter;
else
switch (slower->GetClass()) {
case SHAMAN:
case ENCHANTER:
case Class::Shaman:
case Class::Enchanter:
break;
default:
slower = iter;
}
break;
case BEASTLORD:
case Class::Beastlord:
if (!slower)
slower = iter;
break;
@@ -6985,7 +6985,7 @@ void Bot::CalcBotStats(bool showtext) {
taunt_timer.Start(1000);
if (GetClass() == MONK && GetLevel() >= 10) {
if (GetClass() == Class::Monk && GetLevel() >= 10) {
monkattack_timer.Start(1000);
}
@@ -6997,7 +6997,7 @@ void Bot::CalcBotStats(bool showtext) {
GetBotOwner()->Message(Chat::Yellow, "Level: %i HP: %i AC: %i Mana: %i STR: %i STA: %i DEX: %i AGI: %i INT: %i WIS: %i CHA: %i", GetLevel(), base_hp, AC, max_mana, STR, STA, DEX, AGI, INT, WIS, CHA);
GetBotOwner()->Message(Chat::Yellow, "Resists-- Magic: %i, Poison: %i, Fire: %i, Cold: %i, Disease: %i, Corruption: %i.",MR,PR,FR,CR,DR,Corrup);
// Test Code
if (GetClass() == BARD)
if (GetClass() == Class::Bard)
GetBotOwner()->Message(Chat::Yellow, "Bard Skills-- Brass: %i, Percussion: %i, Singing: %i, Stringed: %i, Wind: %i",
GetSkill(EQ::skills::SkillBrassInstruments), GetSkill(EQ::skills::SkillPercussionInstruments), GetSkill(EQ::skills::SkillSinging), GetSkill(EQ::skills::SkillStringedInstruments), GetSkill(EQ::skills::SkillWindInstruments));
}
@@ -7014,7 +7014,7 @@ void Bot::CalcBotStats(bool showtext) {
GetBotOwner()->Message(Chat::Yellow, "Level: %i HP: %i AC: %i Mana: %i STR: %i STA: %i DEX: %i AGI: %i INT: %i WIS: %i CHA: %i", GetLevel(), max_hp, GetAC(), max_mana, GetSTR(), GetSTA(), GetDEX(), GetAGI(), GetINT(), GetWIS(), GetCHA());
GetBotOwner()->Message(Chat::Yellow, "Resists-- Magic: %i, Poison: %i, Fire: %i, Cold: %i, Disease: %i, Corruption: %i.",GetMR(),GetPR(),GetFR(),GetCR(),GetDR(),GetCorrup());
// Test Code
if (GetClass() == BARD) {
if (GetClass() == Class::Bard) {
GetBotOwner()->Message(Chat::Yellow, "Bard Skills-- Brass: %i, Percussion: %i, Singing: %i, Stringed: %i, Wind: %i",
GetSkill(EQ::skills::SkillBrassInstruments) + GetBrassMod(),
GetSkill(EQ::skills::SkillPercussionInstruments) + GetPercMod(),
@@ -7057,7 +7057,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
uint8 botCasterClass = caster->GetClass();
if (iSpellTypes == SpellType_Heal) {
if (botCasterClass == CLERIC || botCasterClass == DRUID || botCasterClass == SHAMAN) {
if (botCasterClass == Class::Cleric || botCasterClass == Class::Druid || botCasterClass == Class::Shaman) {
if (caster->IsRaidGrouped()) {
Raid* raid = entity_list.GetRaidByBotName(caster->GetName());
uint32 gid = raid->GetGroup(caster->GetName());
@@ -7069,11 +7069,11 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
else if ((iter->member->GetClass() == WARRIOR || iter->member->GetClass() == PALADIN || iter->member->GetClass() == SHADOWKNIGHT) && iter->member->GetHPRatio() < 95) {
else if ((iter->member->GetClass() == Class::Warrior || iter->member->GetClass() == Class::Paladin || iter->member->GetClass() == Class::ShadowKnight) && iter->member->GetHPRatio() < 95) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
else if (iter->member->GetClass() == ENCHANTER && iter->member->GetHPRatio() < 80) {
else if (iter->member->GetClass() == Class::Enchanter && iter->member->GetHPRatio() < 80) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
@@ -7085,7 +7085,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
}
if (iter->member && !iter->member->qglobal && iter->member->HasPet() && iter->member->GetPet()->GetHPRatio() < 50) {
if (iter->member->GetPet()->GetOwner() != caster && caster->IsEngaged() && iter->member->IsCasting() && iter->member->GetClass() != ENCHANTER)
if (iter->member->GetPet()->GetOwner() != caster && caster->IsEngaged() && iter->member->IsCasting() && iter->member->GetClass() != Class::Enchanter)
continue;
if (caster->AICastSpell(iter->member->GetPet(), 100, SpellType_Heal))
@@ -7103,10 +7103,10 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
if (g->members[i]->IsClient() && g->members[i]->GetHPRatio() < 90) {
if (caster->AICastSpell(g->members[i], 100, SpellType_Heal))
return true;
} else if ((g->members[i]->GetClass() == WARRIOR || g->members[i]->GetClass() == PALADIN || g->members[i]->GetClass() == SHADOWKNIGHT) && g->members[i]->GetHPRatio() < 95) {
} else if ((g->members[i]->GetClass() == Class::Warrior || g->members[i]->GetClass() == Class::Paladin || g->members[i]->GetClass() == Class::ShadowKnight) && g->members[i]->GetHPRatio() < 95) {
if (caster->AICastSpell(g->members[i], 100, SpellType_Heal))
return true;
} else if (g->members[i]->GetClass() == ENCHANTER && g->members[i]->GetHPRatio() < 80) {
} else if (g->members[i]->GetClass() == Class::Enchanter && g->members[i]->GetHPRatio() < 80) {
if (caster->AICastSpell(g->members[i], 100, SpellType_Heal))
return true;
} else if (g->members[i]->GetHPRatio() < 70) {
@@ -7116,7 +7116,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
}
if (g->members[i] && !g->members[i]->qglobal && g->members[i]->HasPet() && g->members[i]->GetPet()->GetHPRatio() < 50) {
if (g->members[i]->GetPet()->GetOwner() != caster && caster->IsEngaged() && g->members[i]->IsCasting() && g->members[i]->GetClass() != ENCHANTER )
if (g->members[i]->GetPet()->GetOwner() != caster && caster->IsEngaged() && g->members[i]->IsCasting() && g->members[i]->GetClass() != Class::Enchanter )
continue;
if (caster->AICastSpell(g->members[i]->GetPet(), 100, SpellType_Heal))
@@ -7127,7 +7127,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
}
}
if ((botCasterClass == PALADIN || botCasterClass == BEASTLORD || botCasterClass == RANGER) && (caster->HasGroup() || caster->IsRaidGrouped())) {
if ((botCasterClass == Class::Paladin || botCasterClass == Class::Beastlord || botCasterClass == Class::Ranger) && (caster->HasGroup() || caster->IsRaidGrouped())) {
float hpRatioToHeal = 25.0f;
switch(caster->GetBotStance()) {
case EQ::constants::stanceReactive:
@@ -7156,12 +7156,12 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
} else if (
(iter->member->GetClass() == WARRIOR || iter->member->GetClass() == PALADIN ||
iter->member->GetClass() == SHADOWKNIGHT) &&
(iter->member->GetClass() == Class::Warrior || iter->member->GetClass() == Class::Paladin ||
iter->member->GetClass() == Class::ShadowKnight) &&
iter->member->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
} else if (iter->member->GetClass() == ENCHANTER &&
} else if (iter->member->GetClass() == Class::Enchanter &&
iter->member->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
@@ -7174,7 +7174,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
if (iter->member && !iter->member->qglobal && iter->member->HasPet() &&
iter->member->GetPet()->GetHPRatio() < 25) {
if (iter->member->GetPet()->GetOwner() != caster && caster->IsEngaged() &&
iter->member->IsCasting() && iter->member->GetClass() != ENCHANTER)
iter->member->IsCasting() && iter->member->GetClass() != Class::Enchanter)
continue;
if (caster->AICastSpell(iter->member->GetPet(), 100, SpellType_Heal))
@@ -7191,12 +7191,12 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
if (g->members[i]->IsClient() && g->members[i]->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(g->members[i], 100, SpellType_Heal))
return true;
} else if ((g->members[i]->GetClass() == WARRIOR || g->members[i]->GetClass() == PALADIN ||
g->members[i]->GetClass() == SHADOWKNIGHT) &&
} else if ((g->members[i]->GetClass() == Class::Warrior || g->members[i]->GetClass() == Class::Paladin ||
g->members[i]->GetClass() == Class::ShadowKnight) &&
g->members[i]->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(g->members[i], 100, SpellType_Heal))
return true;
} else if (g->members[i]->GetClass() == ENCHANTER &&
} else if (g->members[i]->GetClass() == Class::Enchanter &&
g->members[i]->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(g->members[i], 100, SpellType_Heal))
return true;
@@ -7209,7 +7209,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
if (g->members[i] && !g->members[i]->qglobal && g->members[i]->HasPet() &&
g->members[i]->GetPet()->GetHPRatio() < 25) {
if (g->members[i]->GetPet()->GetOwner() != caster && caster->IsEngaged() &&
g->members[i]->IsCasting() && g->members[i]->GetClass() != ENCHANTER)
g->members[i]->IsCasting() && g->members[i]->GetClass() != Class::Enchanter)
continue;
if (caster->AICastSpell(g->members[i]->GetPet(), 100, SpellType_Heal))
@@ -7223,7 +7223,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
if (iSpellTypes == SpellType_Buff) {
uint8 chanceToCast = caster->IsEngaged() ? caster->GetChanceToCastBySpellType(SpellType_Buff) : 100;
if (botCasterClass == BARD) {
if (botCasterClass == Class::Bard) {
if (caster->AICastSpell(caster, chanceToCast, SpellType_Buff)) {
return true;
} else
@@ -7266,7 +7266,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
if (iter->member && caster->GetNeedsCured(iter->member)) {
if (caster->AICastSpell(iter->member, caster->GetChanceToCastBySpellType(SpellType_Cure), SpellType_Cure))
return true;
else if (botCasterClass == BARD) {
else if (botCasterClass == Class::Bard) {
return false;
}
}
@@ -7285,7 +7285,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
if (g->members[i] && caster->GetNeedsCured(g->members[i])) {
if (caster->AICastSpell(g->members[i], caster->GetChanceToCastBySpellType(SpellType_Cure), SpellType_Cure))
return true;
else if (botCasterClass == BARD)
else if (botCasterClass == Class::Bard)
return false;
}
@@ -7329,7 +7329,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
}
if (iSpellTypes == SpellType_PreCombatBuff) {
if (botCasterClass == BARD || caster->IsEngaged())
if (botCasterClass == Class::Bard || caster->IsEngaged())
return false;
//added raid check
@@ -7361,7 +7361,7 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
}
if (iSpellTypes == SpellType_InCombatBuff) {
if (botCasterClass == BARD) {
if (botCasterClass == Class::Bard) {
if (caster->AICastSpell(caster, iChance, SpellType_InCombatBuff)) {
return true;
}
@@ -7836,16 +7836,16 @@ bool Bot::GetNeedsHateRedux(Mob *tar) {
if (tar->IsBot()) {
switch (tar->GetClass()) {
case ROGUE:
case Class::Rogue:
if (tar->CanFacestab() || tar->CastToBot()->m_evade_timer.Check(false))
return false;
case CLERIC:
case DRUID:
case SHAMAN:
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
case Class::Cleric:
case Class::Druid:
case Class::Shaman:
case Class::Necromancer:
case Class::Wizard:
case Class::Magician:
case Class::Enchanter:
return true;
default:
return false;
@@ -7874,7 +7874,7 @@ bool Bot::HasOrMayGetAggro() {
void Bot::SetDefaultBotStance() {
EQ::constants::StanceType defaultStance = EQ::constants::stanceBalanced;
if (GetClass() == WARRIOR)
if (GetClass() == Class::Warrior)
defaultStance = EQ::constants::stanceAggressive;
_botStance = defaultStance;
@@ -8707,7 +8707,7 @@ float Bot::GetBotCasterMaxRange(float melee_distance_max) {// Calculate caster d
float caster_distance = 0.0f;
caster_distance_max = GetBotCasterRange() * GetBotCasterRange();
if (!GetBotCasterRange() && GetLevel() >= GetStopMeleeLevel() && GetClass() >= WARRIOR && GetClass() <= BERSERKER) {
if (!GetBotCasterRange() && GetLevel() >= GetStopMeleeLevel() && GetClass() >= Class::Warrior && GetClass() <= Class::Berserker) {
caster_distance_max = MAX_CASTER_DISTANCE[GetClass() - 1];
}
if (caster_distance_max) {
@@ -8806,4 +8806,4 @@ void Bot::AddBotStartingItems(uint16 race_id, uint8 class_id)
}
}
uint8 Bot::spell_casting_chances[SPELL_TYPE_COUNT][PLAYER_CLASS_COUNT][EQ::constants::STANCE_TYPE_COUNT][cntHSND] = { 0 };
uint8 Bot::spell_casting_chances[SPELL_TYPE_COUNT][Class::PLAYER_CLASS_COUNT][EQ::constants::STANCE_TYPE_COUNT][cntHSND] = { 0 };