diff --git a/common/ruletypes.h b/common/ruletypes.h index 08cac9b0e..463268f32 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -884,6 +884,7 @@ RULE_BOOL(Bots, AllowCommandedCharm, true, "If enabled bots can be commanded to RULE_BOOL(Bots, AllowCommandedMez, true, "If enabled bots can be commanded to mez NPCs.") RULE_BOOL(Bots, AllowCommandedResurrect, true, "If enabled bots can be commanded to resurrect players.") RULE_BOOL(Bots, AllowCommandedSummonCorpse, true, "If enabled bots can be commanded to summon other's corpses.") +RULE_BOOL(Bots, AllowCommandedLull, true, "If enabled bots can be commanded to lull targets.") RULE_INT(Bots, CampTimer, 25, "Number of seconds after /camp has begun before bots camp out.") RULE_BOOL(Bots, SendClassRaceOnHelp, true, "If enabled a reminder of how to check class/race IDs will be sent when using compatible commands.") RULE_BOOL(Bots, AllowCrossGroupRaidAssist, true, "If enabled bots will autodefend group or raid members set as main assist.") diff --git a/common/spdat.cpp b/common/spdat.cpp index ff4a3006a..d5ec84092 100644 --- a/common/spdat.cpp +++ b/common/spdat.cpp @@ -2820,6 +2820,7 @@ bool IsBotSpellTypeDetrimental(uint16 spellType, uint8 cls) { case BotSpellTypes::AELifetap: case BotSpellTypes::PBAENuke: case BotSpellTypes::Lull: + case BotSpellTypes::AELull: case BotSpellTypes::HateLine: case BotSpellTypes::AEHateLine: return true; @@ -2946,6 +2947,9 @@ bool IsBotSpellTypeInnate(uint16 spellType) { case BotSpellTypes::AEMez: case BotSpellTypes::Mez: case BotSpellTypes::Lull: + case BotSpellTypes::AELull: + case BotSpellTypes::HateLine: + case BotSpellTypes::AEHateLine: return true; default: return false; @@ -2969,6 +2973,8 @@ bool IsAEBotSpellType(uint16 spellType) { case BotSpellTypes::PBAENuke: case BotSpellTypes::AELifetap: case BotSpellTypes::AERoot: + case BotSpellTypes::AEHateLine: + case BotSpellTypes::AELull: return true; default: return false; @@ -3242,6 +3248,7 @@ bool IsCommandedSpellType(uint16 spellType) { case BotSpellTypes::MovementSpeed: case BotSpellTypes::SendHome: case BotSpellTypes::SummonCorpse: + case BotSpellTypes::AELull: //case BotSpellTypes::Cure: //case BotSpellTypes::GroupCures: //case BotSpellTypes::DamageShields: diff --git a/common/spdat.h b/common/spdat.h index 7b533328b..e030143c7 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -725,11 +725,12 @@ namespace BotSpellTypes constexpr uint16 MovementSpeed = 110; constexpr uint16 SendHome = 111; constexpr uint16 SummonCorpse = 112; + constexpr uint16 AELull = 113; constexpr uint16 START = BotSpellTypes::Nuke; // Do not remove or change this constexpr uint16 END = BotSpellTypes::PetResistBuffs; // Do not remove this, increment as needed constexpr uint16 COMMANDED_START = BotSpellTypes::Lull; // Do not remove or change this - constexpr uint16 COMMANDED_END = BotSpellTypes::SummonCorpse; // Do not remove this, increment as needed + constexpr uint16 COMMANDED_END = BotSpellTypes::AELull; // 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); diff --git a/zone/bot.cpp b/zone/bot.cpp index 72da57cae..f803ffce4 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -9867,6 +9867,7 @@ bool Bot::CanCastSpellType(uint16 spellType, uint16 spell_id, Mob* tar) { } break; + case BotSpellTypes::AELull: case BotSpellTypes::Lull: if (IsHarmonySpell(spell_id) && !HarmonySpellLevelCheck(spell_id, tar)) { LogBotPreChecksDetail("{} says, 'Cancelling cast of {} on {} due to HarmonySpellLevelCheck.'", GetCleanName(), GetSpellName(spell_id), tar->GetCleanName()); //deleteme @@ -11223,6 +11224,9 @@ uint16 Bot::GetSpellListSpellType(uint16 spellType) { case BotSpellTypes::AELifetap: case BotSpellTypes::Lifetap: return BotSpellTypes::Lifetap; + case BotSpellTypes::AELull: + case BotSpellTypes::Lull: + return BotSpellTypes::Lull; case BotSpellTypes::Charm: case BotSpellTypes::Escape: case BotSpellTypes::HateRedux: @@ -11234,8 +11238,7 @@ uint16 Bot::GetSpellListSpellType(uint16 spellType) { case BotSpellTypes::Pet: case BotSpellTypes::PreCombatBuff: case BotSpellTypes::PreCombatBuffSong: - case BotSpellTypes::Resurrect: - case BotSpellTypes::Lull: + case BotSpellTypes::Resurrect: default: return spellType; } diff --git a/zone/bot_commands/cast.cpp b/zone/bot_commands/cast.cpp index 7915a491c..5866bacf4 100644 --- a/zone/bot_commands/cast.cpp +++ b/zone/bot_commands/cast.cpp @@ -268,6 +268,14 @@ void bot_command_cast(Client* c, const Seperator* sep) return; } + break; + case BotSpellTypes::AELull: + case BotSpellTypes::Lull: + if (!RuleB(Bots, AllowCommandedLull)) { + c->Message(Chat::Yellow, "This commanded type is currently disabled."); + return; + } + break; case BotSpellTypes::SummonCorpse: if (!RuleB(Bots, AllowCommandedSummonCorpse)) { diff --git a/zone/botspellsai.cpp b/zone/botspellsai.cpp index aa24443a3..93c38ccf6 100644 --- a/zone/botspellsai.cpp +++ b/zone/botspellsai.cpp @@ -83,6 +83,7 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint16 spellType, uint16 subTarge } break; + case BotSpellTypes::AELull: case BotSpellTypes::Lull: if (tar->GetSpecialAbility(SpecialAbility::PacifyImmunity)) { return false; diff --git a/zone/mob.cpp b/zone/mob.cpp index 355292b69..b47908a17 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -8926,6 +8926,9 @@ std::string Mob::GetSpellTypeNameByID(uint16 spellType) { case BotSpellTypes::SummonCorpse: spellTypeName = "Summon Corpse"; break; + case BotSpellTypes::AELull: + spellTypeName = "AE Lull"; + break; default: break; } @@ -9147,6 +9150,9 @@ std::string Mob::GetSpellTypeShortNameByID(uint16 spellType) { case BotSpellTypes::SummonCorpse: spellTypeName = "summoncorpse"; break; + case BotSpellTypes::AELull: + spellTypeName = "aelull"; + break; default: break; }