mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-26 11:27:17 +00:00
adjust spell hold checks to rely on caster and
Implement pet resist buffs and pet damage shields
This commit is contained in:
@@ -2881,6 +2881,8 @@ bool BOT_SPELL_TYPES_BENEFICIAL(uint16 spellType, uint8 cls) {
|
|||||||
case BotSpellTypes::PetBuffs:
|
case BotSpellTypes::PetBuffs:
|
||||||
case BotSpellTypes::PreCombatBuff:
|
case BotSpellTypes::PreCombatBuff:
|
||||||
case BotSpellTypes::PreCombatBuffSong:
|
case BotSpellTypes::PreCombatBuffSong:
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
case BotSpellTypes::Resurrect:
|
case BotSpellTypes::Resurrect:
|
||||||
return true;
|
return true;
|
||||||
@@ -2916,8 +2918,10 @@ bool BOT_SPELL_TYPES_OTHER_BENEFICIAL(uint16 spellType) {
|
|||||||
case BotSpellTypes::Cure:
|
case BotSpellTypes::Cure:
|
||||||
case BotSpellTypes::GroupCures:
|
case BotSpellTypes::GroupCures:
|
||||||
case BotSpellTypes::DamageShields:
|
case BotSpellTypes::DamageShields:
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
case BotSpellTypes::PetBuffs:
|
case BotSpellTypes::PetBuffs:
|
||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
@@ -3050,8 +3054,10 @@ bool IsClientBotSpellType(uint16 spellType) {
|
|||||||
case BotSpellTypes::Cure:
|
case BotSpellTypes::Cure:
|
||||||
case BotSpellTypes::GroupCures:
|
case BotSpellTypes::GroupCures:
|
||||||
case BotSpellTypes::DamageShields:
|
case BotSpellTypes::DamageShields:
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
case BotSpellTypes::PetBuffs:
|
case BotSpellTypes::PetBuffs:
|
||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
+4
-2
@@ -706,9 +706,11 @@ namespace BotSpellTypes
|
|||||||
constexpr uint16 PetHoTHeals = 50;
|
constexpr uint16 PetHoTHeals = 50;
|
||||||
constexpr uint16 DamageShields = 51;
|
constexpr uint16 DamageShields = 51;
|
||||||
constexpr uint16 ResistBuffs = 52;
|
constexpr uint16 ResistBuffs = 52;
|
||||||
|
constexpr uint16 PetDamageShields = 53;
|
||||||
|
constexpr uint16 PetResistBuffs = 54;
|
||||||
|
|
||||||
constexpr uint16 START = BotSpellTypes::Nuke; // Do not remove or change this
|
constexpr uint16 START = BotSpellTypes::Nuke; // Do not remove or change this
|
||||||
constexpr uint16 END = BotSpellTypes::ResistBuffs; // Do not remove this, increment as needed
|
constexpr uint16 END = BotSpellTypes::PetResistBuffs; // Do not remove this, increment as needed
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint32 SPELL_TYPES_DETRIMENTAL = (SpellType_Nuke | SpellType_Root | SpellType_Lifetap | SpellType_Snare | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Charm | SpellType_Debuff | SpellType_Slow);
|
const uint32 SPELL_TYPES_DETRIMENTAL = (SpellType_Nuke | SpellType_Root | SpellType_Lifetap | SpellType_Snare | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Charm | SpellType_Debuff | SpellType_Slow);
|
||||||
|
|||||||
@@ -9516,7 +9516,9 @@ bool Bot::CanCastSpellType(uint16 spellType, uint16 spellid, Mob* tar) {
|
|||||||
case BotSpellTypes::PetBuffs:
|
case BotSpellTypes::PetBuffs:
|
||||||
case BotSpellTypes::PreCombatBuff:
|
case BotSpellTypes::PreCombatBuff:
|
||||||
case BotSpellTypes::DamageShields:
|
case BotSpellTypes::DamageShields:
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
if (
|
if (
|
||||||
!(
|
!(
|
||||||
spells[spellid].target_type == ST_Target ||
|
spells[spellid].target_type == ST_Target ||
|
||||||
@@ -10411,6 +10413,14 @@ uint16 Bot::GetDefaultSpellTypeIdlePriority(uint16 spellType, uint8 botClass, ui
|
|||||||
case BotSpellTypes::PreCombatBuffSong:
|
case BotSpellTypes::PreCombatBuffSong:
|
||||||
priority = 23;
|
priority = 23;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
|
priority = 24;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
|
priority = 25;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
priority = 0; //unused
|
priority = 0; //unused
|
||||||
@@ -10872,7 +10882,9 @@ uint16 Bot::GetSpellListSpellType(uint16 spellType) {
|
|||||||
case BotSpellTypes::Buff:
|
case BotSpellTypes::Buff:
|
||||||
case BotSpellTypes::PetBuffs:
|
case BotSpellTypes::PetBuffs:
|
||||||
case BotSpellTypes::DamageShields:
|
case BotSpellTypes::DamageShields:
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
return BotSpellTypes::Buff;
|
return BotSpellTypes::Buff;
|
||||||
case BotSpellTypes::AEMez:
|
case BotSpellTypes::AEMez:
|
||||||
case BotSpellTypes::Mez:
|
case BotSpellTypes::Mez:
|
||||||
@@ -10932,18 +10944,21 @@ bool Bot::IsValidSpellTypeBySpellID(uint16 spellType, uint16 spellid) {
|
|||||||
|
|
||||||
switch (spellType) {
|
switch (spellType) {
|
||||||
case BotSpellTypes::Buff:
|
case BotSpellTypes::Buff:
|
||||||
|
case BotSpellTypes::PetBuffs:
|
||||||
if (IsResistanceOnlySpell(spellid) || IsDamageShieldOnlySpell(spellid) || IsDamageShieldAndResistanceSpellOnly(spellid)) {
|
if (IsResistanceOnlySpell(spellid) || IsDamageShieldOnlySpell(spellid) || IsDamageShieldAndResistanceSpellOnly(spellid)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
if (IsResistanceOnlySpell(spellid)) {
|
if (IsResistanceOnlySpell(spellid)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
case BotSpellTypes::DamageShields:
|
case BotSpellTypes::DamageShields:
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
if (IsDamageShieldOnlySpell(spellid) || IsDamageShieldAndResistanceSpellOnly(spellid)) {
|
if (IsDamageShieldOnlySpell(spellid) || IsDamageShieldAndResistanceSpellOnly(spellid)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,15 +9,12 @@ void bot_command_spell_holds(Client* c, const Seperator* sep)
|
|||||||
if (helper_is_help_or_usage(sep->arg[1])) {
|
if (helper_is_help_or_usage(sep->arg[1])) {
|
||||||
std::vector<std::string> description =
|
std::vector<std::string> description =
|
||||||
{
|
{
|
||||||
"Toggles whether or not bots can cast or receive certain spell types"
|
"Toggles whether or not bots can cast certain spell types"
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<std::string> notes =
|
std::vector<std::string> notes =
|
||||||
{
|
{
|
||||||
"- All pet types are based off the pet's owner's setting",
|
"- All pet types are based off the pet owner's setting when a pet is the target"
|
||||||
"- Any remaining types use the owner's setting when a pet is the target",
|
|
||||||
"- All Heals, Cures, Buffs (DS and resists included) are based off the target's setting, not the caster",
|
|
||||||
"- e.g., BotA is healing BotB using BotB's settings",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<std::string> example_format =
|
std::vector<std::string> example_format =
|
||||||
|
|||||||
@@ -125,7 +125,9 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint16 spellType) {
|
|||||||
case BotSpellTypes::PetBuffs:
|
case BotSpellTypes::PetBuffs:
|
||||||
case BotSpellTypes::PreCombatBuff:
|
case BotSpellTypes::PreCombatBuff:
|
||||||
case BotSpellTypes::DamageShields:
|
case BotSpellTypes::DamageShields:
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
if (!tar->IsOfClientBot() && !(tar->IsPet() && tar->GetOwner() && tar->GetOwner()->IsOfClientBot())) {
|
if (!tar->IsOfClientBot() && !(tar->IsPet() && tar->GetOwner() && tar->GetOwner()->IsOfClientBot())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -2039,7 +2041,9 @@ uint8 Bot::GetChanceToCastBySpellType(uint16 spellType) //TODO bot rewrite - adj
|
|||||||
case BotSpellTypes::Buff:
|
case BotSpellTypes::Buff:
|
||||||
case BotSpellTypes::PetBuffs:
|
case BotSpellTypes::PetBuffs:
|
||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
case BotSpellTypes::DamageShields:
|
case BotSpellTypes::DamageShields:
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
return RuleI(Bots, PercentChanceToCastBuff);
|
return RuleI(Bots, PercentChanceToCastBuff);
|
||||||
case BotSpellTypes::Escape:
|
case BotSpellTypes::Escape:
|
||||||
return RuleI(Bots, PercentChanceToCastEscape);
|
return RuleI(Bots, PercentChanceToCastEscape);
|
||||||
|
|||||||
+18
-4
@@ -8886,6 +8886,12 @@ std::string Mob::GetSpellTypeNameByID(uint16 spellType) {
|
|||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
spellTypeName = "Resist Buff";
|
spellTypeName = "Resist Buff";
|
||||||
break;
|
break;
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
|
spellTypeName = "Pet Damage Shield";
|
||||||
|
break;
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
|
spellTypeName = "Pet Resist Buff";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -9056,6 +9062,12 @@ std::string Mob::GetSpellTypeShortNameByID(uint16 spellType) {
|
|||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
spellTypeName = "resistbuffs";
|
spellTypeName = "resistbuffs";
|
||||||
break;
|
break;
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
|
spellTypeName = "petdamageshields";
|
||||||
|
break;
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
|
spellTypeName = "petresistbuffs";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -9346,6 +9358,8 @@ uint8 Mob::GetDefaultSpellMaxThreshold(uint16 spellType, uint8 stance) {
|
|||||||
case BotSpellTypes::PetBuffs:
|
case BotSpellTypes::PetBuffs:
|
||||||
case BotSpellTypes::PreCombatBuff:
|
case BotSpellTypes::PreCombatBuff:
|
||||||
case BotSpellTypes::PreCombatBuffSong:
|
case BotSpellTypes::PreCombatBuffSong:
|
||||||
|
case BotSpellTypes::PetDamageShields:
|
||||||
|
case BotSpellTypes::PetResistBuffs:
|
||||||
case BotSpellTypes::ResistBuffs:
|
case BotSpellTypes::ResistBuffs:
|
||||||
case BotSpellTypes::Resurrect:
|
case BotSpellTypes::Resurrect:
|
||||||
return 100;
|
return 100;
|
||||||
@@ -9418,10 +9432,6 @@ bool Mob::GetUltimateSpellHold(uint16 spellType, Mob* tar) {
|
|||||||
return tar->GetOwner()->GetSpellHold(GetPetSpellType(spellType));
|
return tar->GetOwner()->GetSpellHold(GetPetSpellType(spellType));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BOT_SPELL_TYPES_OTHER_BENEFICIAL(spellType) && tar->IsOfClientBot()) {
|
|
||||||
return tar->GetSpellHold(spellType);
|
|
||||||
}
|
|
||||||
|
|
||||||
return GetSpellHold(spellType);
|
return GetSpellHold(spellType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9503,6 +9513,10 @@ 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::DamageShields:
|
||||||
|
return BotSpellTypes::PetDamageShields;
|
||||||
|
case BotSpellTypes::ResistBuffs:
|
||||||
|
return BotSpellTypes::PetResistBuffs;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user