Implmenet PetCures, add some missing types for defaults/chance to cast

This commit is contained in:
nytmyr
2024-12-20 09:38:40 -06:00
parent 54b9825537
commit 322f8c5ffd
5 changed files with 157 additions and 118 deletions
+6
View File
@@ -2849,6 +2849,7 @@ bool IsBotSpellTypeBeneficial(uint16 spellType) {
case BotSpellTypes::Buff: case BotSpellTypes::Buff:
case BotSpellTypes::Cure: case BotSpellTypes::Cure:
case BotSpellTypes::GroupCures: case BotSpellTypes::GroupCures:
case BotSpellTypes::PetCures:
case BotSpellTypes::DamageShields: case BotSpellTypes::DamageShields:
case BotSpellTypes::InCombatBuffSong: case BotSpellTypes::InCombatBuffSong:
case BotSpellTypes::OutOfCombatBuffSong: case BotSpellTypes::OutOfCombatBuffSong:
@@ -2898,6 +2899,7 @@ bool IsBotSpellTypeOtherBeneficial(uint16 spellType) {
case BotSpellTypes::Buff: case BotSpellTypes::Buff:
case BotSpellTypes::Cure: case BotSpellTypes::Cure:
case BotSpellTypes::GroupCures: case BotSpellTypes::GroupCures:
case BotSpellTypes::PetCures:
case BotSpellTypes::DamageShields: case BotSpellTypes::DamageShields:
case BotSpellTypes::PetDamageShields: case BotSpellTypes::PetDamageShields:
case BotSpellTypes::PetBuffs: case BotSpellTypes::PetBuffs:
@@ -3020,6 +3022,7 @@ bool IsPetBotSpellType(uint16 spellType) {
case BotSpellTypes::PetHoTHeals: case BotSpellTypes::PetHoTHeals:
case BotSpellTypes::PetDamageShields: case BotSpellTypes::PetDamageShields:
case BotSpellTypes::PetResistBuffs: case BotSpellTypes::PetResistBuffs:
case BotSpellTypes::PetCures:
return true; return true;
default: default:
return false; return false;
@@ -3046,6 +3049,7 @@ bool IsClientBotSpellType(uint16 spellType) {
case BotSpellTypes::Buff: case BotSpellTypes::Buff:
case BotSpellTypes::Cure: case BotSpellTypes::Cure:
case BotSpellTypes::GroupCures: case BotSpellTypes::GroupCures:
case BotSpellTypes::PetCures:
case BotSpellTypes::DamageShields: case BotSpellTypes::DamageShields:
case BotSpellTypes::PetDamageShields: case BotSpellTypes::PetDamageShields:
case BotSpellTypes::PetBuffs: case BotSpellTypes::PetBuffs:
@@ -3513,6 +3517,8 @@ uint16 GetPetSpellType(uint16 spellType) {
return BotSpellTypes::PetVeryFastHeals; return BotSpellTypes::PetVeryFastHeals;
case BotSpellTypes::HoTHeals: case BotSpellTypes::HoTHeals:
return BotSpellTypes::PetHoTHeals; return BotSpellTypes::PetHoTHeals;
case BotSpellTypes::Cures:
return BotSpellTypes::PetCures;
case BotSpellTypes::DamageShields: case BotSpellTypes::DamageShields:
return BotSpellTypes::PetDamageShields; return BotSpellTypes::PetDamageShields;
case BotSpellTypes::ResistBuffs: case BotSpellTypes::ResistBuffs:
+5 -4
View File
@@ -706,10 +706,11 @@ namespace BotSpellTypes
constexpr uint16 PetFastHeals = 50; constexpr uint16 PetFastHeals = 50;
constexpr uint16 PetVeryFastHeals = 51; constexpr uint16 PetVeryFastHeals = 51;
constexpr uint16 PetHoTHeals = 52; constexpr uint16 PetHoTHeals = 52;
constexpr uint16 DamageShields = 53; constexpr uint16 PetCures = 53;
constexpr uint16 ResistBuffs = 54; constexpr uint16 DamageShields = 54;
constexpr uint16 PetDamageShields = 55; constexpr uint16 ResistBuffs = 55;
constexpr uint16 PetResistBuffs = 56; constexpr uint16 PetDamageShields = 56;
constexpr uint16 PetResistBuffs = 57;
// Command Spell Types // Command Spell Types
constexpr uint16 Teleport = 100; // this is handled by ^depart so uses other logic constexpr uint16 Teleport = 100; // this is handled by ^depart so uses other logic
+46 -37
View File
@@ -10550,45 +10550,49 @@ uint16 Bot::GetDefaultSpellTypeIdlePriority(uint16 spellType, uint8 botClass, ui
priority = 15; priority = 15;
break; break;
case BotSpellTypes::Pet: case BotSpellTypes::PetCures:
priority = 16; priority = 16;
break; break;
case BotSpellTypes::Buff: case BotSpellTypes::Pet:
priority = 17; priority = 17;
break; break;
case BotSpellTypes::OutOfCombatBuffSong: case BotSpellTypes::Buff:
priority = 18; priority = 18;
break; break;
case BotSpellTypes::ResistBuffs: case BotSpellTypes::OutOfCombatBuffSong:
priority = 19; priority = 19;
break; break;
case BotSpellTypes::DamageShields: case BotSpellTypes::ResistBuffs:
priority = 20; priority = 20;
break; break;
case BotSpellTypes::PetBuffs: case BotSpellTypes::DamageShields:
priority = 21; priority = 21;
break; break;
case BotSpellTypes::PreCombatBuff: case BotSpellTypes::PetBuffs:
priority = 22; priority = 22;
break; break;
case BotSpellTypes::PreCombatBuffSong: case BotSpellTypes::PreCombatBuff:
priority = 23; priority = 23;
break; break;
case BotSpellTypes::PetResistBuffs: case BotSpellTypes::PreCombatBuffSong:
priority = 24; priority = 24;
break; break;
case BotSpellTypes::PetDamageShields: case BotSpellTypes::PetResistBuffs:
priority = 25; priority = 25;
break;
case BotSpellTypes::PetDamageShields:
priority = 26;
break; break;
default: default:
priority = 0; //unused priority = 0; //unused
@@ -10633,60 +10637,62 @@ uint16 Bot::GetDefaultSpellTypeEngagedPriority(uint16 spellType, uint8 botClass,
return 15; return 15;
case BotSpellTypes::PetHoTHeals: case BotSpellTypes::PetHoTHeals:
return 16; return 16;
case BotSpellTypes::AELifetap: case BotSpellTypes::PetCures:
return 17; return 17;
case BotSpellTypes::Lifetap: case BotSpellTypes::AELifetap:
return 18; return 18;
case BotSpellTypes::HateRedux: case BotSpellTypes::Lifetap:
return 19; return 19;
case BotSpellTypes::AEMez: case BotSpellTypes::HateRedux:
return 20; return 20;
case BotSpellTypes::Mez: case BotSpellTypes::AEMez:
return 21; return 21;
case BotSpellTypes::AEHateLine: case BotSpellTypes::Mez:
return 22; return 22;
case BotSpellTypes::HateLine: case BotSpellTypes::AEHateLine:
return 23; return 23;
case BotSpellTypes::AEDispel: case BotSpellTypes::HateLine:
return 24; return 24;
case BotSpellTypes::Dispel: case BotSpellTypes::AEDispel:
return 25; return 25;
case BotSpellTypes::AEDebuff: case BotSpellTypes::Dispel:
return 26; return 26;
case BotSpellTypes::Debuff: case BotSpellTypes::AEDebuff:
return 27; return 27;
case BotSpellTypes::AESnare: case BotSpellTypes::Debuff:
return 28; return 28;
case BotSpellTypes::Snare: case BotSpellTypes::AESnare:
return 29; return 29;
case BotSpellTypes::AESlow: case BotSpellTypes::Snare:
return 30; return 30;
case BotSpellTypes::Slow: case BotSpellTypes::AESlow:
return 31; return 31;
case BotSpellTypes::AERoot: case BotSpellTypes::Slow:
return 32; return 32;
case BotSpellTypes::Root: case BotSpellTypes::AERoot:
return 33; return 33;
case BotSpellTypes::AEDoT: case BotSpellTypes::Root:
return 34; return 34;
case BotSpellTypes::DOT: case BotSpellTypes::AEDoT:
return 35; return 35;
case BotSpellTypes::AEStun: case BotSpellTypes::DOT:
return 36; return 36;
case BotSpellTypes::PBAENuke: case BotSpellTypes::AEStun:
return 37; return 37;
case BotSpellTypes::AENukes: case BotSpellTypes::PBAENuke:
return 38; return 38;
case BotSpellTypes::AERains: case BotSpellTypes::AENukes:
return 39; return 39;
case BotSpellTypes::Stun: case BotSpellTypes::AERains:
return 40; return 40;
case BotSpellTypes::Nuke: case BotSpellTypes::Stun:
return 41; return 41;
case BotSpellTypes::InCombatBuff: case BotSpellTypes::Nuke:
return 42; return 42;
case BotSpellTypes::InCombatBuffSong: case BotSpellTypes::InCombatBuff:
return 43; return 43;
case BotSpellTypes::InCombatBuffSong:
return 44;
default: default:
return 0; return 0;
} }
@@ -10738,6 +10744,8 @@ uint16 Bot::GetDefaultSpellTypePursuePriority(uint16 spellType, uint8 botClass,
return 21; return 21;
case BotSpellTypes::PetHoTHeals: case BotSpellTypes::PetHoTHeals:
return 22; return 22;
case BotSpellTypes::PetCures:
return 23;
default: default:
return 0; return 0;
} }
@@ -11215,6 +11223,7 @@ uint16 Bot::GetSpellListSpellType(uint16 spellType) {
return BotSpellTypes::Fear; return BotSpellTypes::Fear;
case BotSpellTypes::GroupCures: case BotSpellTypes::GroupCures:
case BotSpellTypes::Cure: case BotSpellTypes::Cure:
case BotSpellTypes::PetCures:
return BotSpellTypes::Cure; return BotSpellTypes::Cure;
case BotSpellTypes::AERoot: case BotSpellTypes::AERoot:
case BotSpellTypes::Root: case BotSpellTypes::Root:
+3 -1
View File
@@ -38,7 +38,7 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint16 spellType, uint16 subTarge
(spellType == BotSpellTypes::PreCombatBuffSong && tar->IsPet()) || (spellType == BotSpellTypes::PreCombatBuffSong && tar->IsPet()) ||
(!RuleB(Bots, AllowBuffingHealingFamiliars) && tar->IsFamiliar()) || (!RuleB(Bots, AllowBuffingHealingFamiliars) && tar->IsFamiliar()) ||
(tar->IsPet() && tar->IsCharmed() && spellType == BotSpellTypes::PetBuffs && !RuleB(Bots, AllowCharmedPetBuffs)) || (tar->IsPet() && tar->IsCharmed() && spellType == BotSpellTypes::PetBuffs && !RuleB(Bots, AllowCharmedPetBuffs)) ||
(tar->IsPet() && tar->IsCharmed() && (spellType == BotSpellTypes::Cure || spellType == BotSpellTypes::GroupCures) && !RuleB(Bots, AllowCharmedPetCures)) || (tar->IsPet() && tar->IsCharmed() && spellType == BotSpellTypes::PetCures && !RuleB(Bots, AllowCharmedPetCures)) ||
(tar->IsPet() && tar->IsCharmed() && IsHealBotSpellType(spellType) && !RuleB(Bots, AllowCharmedPetHeals)) (tar->IsPet() && tar->IsCharmed() && IsHealBotSpellType(spellType) && !RuleB(Bots, AllowCharmedPetHeals))
) { ) {
return false; return false;
@@ -189,6 +189,7 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint16 spellType, uint16 subTarge
return BotCastHeal(tar, botClass, botSpell, spellType); return BotCastHeal(tar, botClass, botSpell, spellType);
case BotSpellTypes::GroupCures: case BotSpellTypes::GroupCures:
case BotSpellTypes::Cure: case BotSpellTypes::Cure:
case BotSpellTypes::PetCures:
if (!tar->IsOfClientBot() && !(tar->IsPet() && tar->GetOwner() && tar->GetOwner()->IsOfClientBot())) { if (!tar->IsOfClientBot() && !(tar->IsPet() && tar->GetOwner() && tar->GetOwner()->IsOfClientBot())) {
return false; return false;
} }
@@ -2093,6 +2094,7 @@ uint8 Bot::GetChanceToCastBySpellType(uint16 spellType)
case BotSpellTypes::Debuff: case BotSpellTypes::Debuff:
return RuleI(Bots, PercentChanceToCastDebuff); return RuleI(Bots, PercentChanceToCastDebuff);
case BotSpellTypes::Cure: case BotSpellTypes::Cure:
case BotSpellTypes::PetCures:
return RuleI(Bots, PercentChanceToCastCure); return RuleI(Bots, PercentChanceToCastCure);
case BotSpellTypes::GroupCures: case BotSpellTypes::GroupCures:
return RuleI(Bots, PercentChanceToCastGroupCure); return RuleI(Bots, PercentChanceToCastGroupCure);
+97 -76
View File
@@ -8863,6 +8863,9 @@ std::string Mob::GetSpellTypeNameByID(uint16 spellType) {
case BotSpellTypes::GroupCures: case BotSpellTypes::GroupCures:
spellTypeName = "Group Cure"; spellTypeName = "Group Cure";
break; break;
case BotSpellTypes::PetCures:
spellTypeName = "Pet Cure";
break;
case BotSpellTypes::Resurrect: case BotSpellTypes::Resurrect:
spellTypeName = "Resurrect"; spellTypeName = "Resurrect";
break; break;
@@ -9087,6 +9090,9 @@ std::string Mob::GetSpellTypeShortNameByID(uint16 spellType) {
case BotSpellTypes::GroupCures: case BotSpellTypes::GroupCures:
spellTypeName = "groupcures"; spellTypeName = "groupcures";
break; break;
case BotSpellTypes::PetCures:
spellTypeName = "petcure";
break;
case BotSpellTypes::Resurrect: case BotSpellTypes::Resurrect:
spellTypeName = "resurrect"; spellTypeName = "resurrect";
break; break;
@@ -9298,7 +9304,56 @@ std::string Mob::GetSubTypeNameByID(uint16 subType) {
} }
bool Mob::GetDefaultSpellHold(uint16 spellType, uint8 stance) { bool Mob::GetDefaultSpellHold(uint16 spellType, uint8 stance) {
uint8 botClass = GetClass();
switch (spellType) { switch (spellType) {
case BotSpellTypes::FastHeals:
case BotSpellTypes::VeryFastHeals:
case BotSpellTypes::Pet:
case BotSpellTypes::Escape:
case BotSpellTypes::Lifetap:
case BotSpellTypes::Buff:
case BotSpellTypes::PetBuffs:
case BotSpellTypes::InCombatBuff:
case BotSpellTypes::PreCombatBuff:
case BotSpellTypes::DamageShields:
return false;
case BotSpellTypes::GroupCompleteHeals:
case BotSpellTypes::GroupHeals:
case BotSpellTypes::GroupHoTHeals:
case BotSpellTypes::HoTHeals:
case BotSpellTypes::CompleteHeal:
case BotSpellTypes::PetFastHeals:
case BotSpellTypes::PetRegularHeals:
case BotSpellTypes::PetVeryFastHeals:
case BotSpellTypes::RegularHeal:
switch (stance) {
case Stance::Aggressive:
case Stance::AEBurn:
case Stance::Burn:
return true;
default:
return false;
}
case BotSpellTypes::Cure:
case BotSpellTypes::GroupCures:
switch (stance) {
case Stance::Aggressive:
case Stance::AEBurn:
case Stance::Burn:
return true;
default:
return false;
}
case BotSpellTypes::InCombatBuffSong:
case BotSpellTypes::OutOfCombatBuffSong:
case BotSpellTypes::PreCombatBuffSong:
if (botClass == Class::Bard) {
return false;
}
else {
return true;
}
case BotSpellTypes::Nuke: case BotSpellTypes::Nuke:
case BotSpellTypes::DOT: case BotSpellTypes::DOT:
case BotSpellTypes::Stun: case BotSpellTypes::Stun:
@@ -9320,15 +9375,6 @@ bool Mob::GetDefaultSpellHold(uint16 spellType, uint8 stance) {
default: default:
return true; return true;
} }
case BotSpellTypes::AESnare:
case BotSpellTypes::AERoot:
case BotSpellTypes::Root:
case BotSpellTypes::AEDispel:
case BotSpellTypes::Dispel:
case BotSpellTypes::AEFear:
case BotSpellTypes::Fear:
case BotSpellTypes::AEHateLine:
return true;
case BotSpellTypes::Mez: case BotSpellTypes::Mez:
case BotSpellTypes::AEMez: case BotSpellTypes::AEMez:
case BotSpellTypes::Debuff: case BotSpellTypes::Debuff:
@@ -9352,17 +9398,8 @@ bool Mob::GetDefaultSpellHold(uint16 spellType, uint8 stance) {
default: default:
return false; return false;
} }
case BotSpellTypes::InCombatBuffSong:
case BotSpellTypes::OutOfCombatBuffSong:
case BotSpellTypes::PreCombatBuffSong:
if (GetClass() == Class::Bard) {
return false;
}
else {
return true;
}
case BotSpellTypes::HateLine: case BotSpellTypes::HateLine:
if (GetClass() == Class::ShadowKnight || GetClass() == Class::Paladin) { if (botClass == Class::ShadowKnight || botClass == Class::Paladin) {
switch (stance) { switch (stance) {
case Stance::Aggressive: case Stance::Aggressive:
return false; return false;
@@ -9373,45 +9410,23 @@ bool Mob::GetDefaultSpellHold(uint16 spellType, uint8 stance) {
else { else {
return true; return true;
} }
case BotSpellTypes::Cure: case BotSpellTypes::Charm:
case BotSpellTypes::GroupCures: case BotSpellTypes::Resurrect:
switch (stance) { case BotSpellTypes::AESnare:
case Stance::Aggressive: case BotSpellTypes::AERoot:
case Stance::AEBurn: case BotSpellTypes::Root:
case Stance::Burn: case BotSpellTypes::AEDispel:
return true; case BotSpellTypes::Dispel:
default: case BotSpellTypes::AEFear:
return false; case BotSpellTypes::Fear:
} case BotSpellTypes::AEHateLine:
case BotSpellTypes::GroupCompleteHeals: case BotSpellTypes::PetCures:
case BotSpellTypes::GroupHeals:
case BotSpellTypes::GroupHoTHeals:
case BotSpellTypes::HoTHeals:
case BotSpellTypes::CompleteHeal:
case BotSpellTypes::PetCompleteHeals:
case BotSpellTypes::PetFastHeals:
case BotSpellTypes::PetHoTHeals: case BotSpellTypes::PetHoTHeals:
case BotSpellTypes::PetRegularHeals: case BotSpellTypes::PetCompleteHeals:
case BotSpellTypes::PetVeryFastHeals: case BotSpellTypes::PetDamageShields:
case BotSpellTypes::RegularHeal: case BotSpellTypes::PetResistBuffs:
switch (stance) {
case Stance::Aggressive:
case Stance::AEBurn:
case Stance::Burn:
return true;
default:
return false;
}
case BotSpellTypes::FastHeals:
case BotSpellTypes::VeryFastHeals:
case BotSpellTypes::Pet:
case BotSpellTypes::Escape:
case BotSpellTypes::Lifetap:
case BotSpellTypes::Buff:
case BotSpellTypes::InCombatBuff:
case BotSpellTypes::PreCombatBuff:
default: default:
return false; return true;
} }
} }
@@ -9531,6 +9546,8 @@ uint8 Mob::GetDefaultSpellMinThreshold(uint16 spellType, uint8 stance) {
} }
uint8 Mob::GetDefaultSpellMaxThreshold(uint16 spellType, uint8 stance) { uint8 Mob::GetDefaultSpellMaxThreshold(uint16 spellType, uint8 stance) {
uint8 botClass = GetClass();
switch (spellType) { switch (spellType) {
case BotSpellTypes::Escape: case BotSpellTypes::Escape:
case BotSpellTypes::VeryFastHeals: case BotSpellTypes::VeryFastHeals:
@@ -9599,6 +9616,7 @@ uint8 Mob::GetDefaultSpellMaxThreshold(uint16 spellType, uint8 stance) {
case BotSpellTypes::Snare: case BotSpellTypes::Snare:
case BotSpellTypes::AEFear: case BotSpellTypes::AEFear:
case BotSpellTypes::Fear: case BotSpellTypes::Fear:
case BotSpellTypes::AEDispel:
case BotSpellTypes::Dispel: case BotSpellTypes::Dispel:
case BotSpellTypes::AEDebuff: case BotSpellTypes::AEDebuff:
case BotSpellTypes::Debuff: case BotSpellTypes::Debuff:
@@ -9614,10 +9632,30 @@ uint8 Mob::GetDefaultSpellMaxThreshold(uint16 spellType, uint8 stance) {
default: default:
return 99; return 99;
} }
case BotSpellTypes::GroupHoTHeals:
case BotSpellTypes::HoTHeals:
case BotSpellTypes::PetHoTHeals:
if (botClass == Class::Necromancer || botClass == Class::Shaman) {
return 60;
}
else {
switch (stance) {
case Stance::AEBurn:
case Stance::Burn:
case Stance::Aggressive:
return 95;
case Stance::Efficient:
return 80;
default:
return 90;
}
}
case BotSpellTypes::Buff: case BotSpellTypes::Buff:
case BotSpellTypes::Charm: case BotSpellTypes::Charm:
case BotSpellTypes::Cure: case BotSpellTypes::Cure:
case BotSpellTypes::DamageShields: case BotSpellTypes::GroupCures:
case BotSpellTypes::PetCures:
case BotSpellTypes::DamageShields:
case BotSpellTypes::HateRedux: case BotSpellTypes::HateRedux:
case BotSpellTypes::InCombatBuff: case BotSpellTypes::InCombatBuff:
case BotSpellTypes::InCombatBuffSong: case BotSpellTypes::InCombatBuffSong:
@@ -9634,25 +9672,6 @@ uint8 Mob::GetDefaultSpellMaxThreshold(uint16 spellType, uint8 stance) {
case BotSpellTypes::Resurrect: case BotSpellTypes::Resurrect:
case BotSpellTypes::HateLine: case BotSpellTypes::HateLine:
case BotSpellTypes::AEHateLine: case BotSpellTypes::AEHateLine:
return 100;
case BotSpellTypes::GroupHoTHeals:
case BotSpellTypes::HoTHeals:
case BotSpellTypes::PetHoTHeals:
if (GetClass() == Class::Necromancer || GetClass() == Class::Shaman) {
return 60;
}
else {
switch (stance) {
case Stance::AEBurn:
case Stance::Burn:
case Stance::Aggressive:
return 95;
case Stance::Efficient:
return 80;
default:
return 90;
}
}
default: default:
return 100; return 100;
} }
@@ -9785,6 +9804,8 @@ uint16 Mob::GetPetSpellType(uint16 spellType) {
return BotSpellTypes::PetHoTHeals; return BotSpellTypes::PetHoTHeals;
case BotSpellTypes::Buff: case BotSpellTypes::Buff:
return BotSpellTypes::PetBuffs; return BotSpellTypes::PetBuffs;
case BotSpellTypes::Cure:
return BotSpellTypes::PetCures;
case BotSpellTypes::DamageShields: case BotSpellTypes::DamageShields:
return BotSpellTypes::PetDamageShields; return BotSpellTypes::PetDamageShields;
case BotSpellTypes::ResistBuffs: case BotSpellTypes::ResistBuffs: