diff --git a/zone/bot.cpp b/zone/bot.cpp index 81c7de239..bfedc1494 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -2200,15 +2200,28 @@ void Bot::AI_Process() // PULLING FLAG (ACTIONABLE RANGE) if (GetPullingFlag()) { - if (!IsBotNonSpellFighter() && !HOLDING && AI_HasSpells()) { - SetPullingSpell(true); + if (!TargetValidation(tar)) { return; } + + if (atCombatRange) { + if (RuleB(Bots, AllowRangedPulling) && IsBotRanged() && ranged_timer.Check(false)) { + StopMoving(CalculateHeadingToTarget(tar->GetX(), tar->GetY())); + + if (BotRangedAttack(tar) && CheckDoubleRangedAttack()) { + BotRangedAttack(tar, true); + } + + ranged_timer.Start(); - if (AI_EngagedCastCheck()) { - SetPullingSpell(false); return; } - SetPullingSpell(false); + if (RuleB(Bots, AllowAISpellPulling) && !IsBotNonSpellFighter() && AI_HasSpells()) { + SetPullingSpell(true); + AI_EngagedCastCheck(); + SetPullingSpell(false); + + return; + } } if (RuleB(Bots, UseSpellPulling)) { @@ -2216,38 +2229,15 @@ void Bot::AI_Process() if (tar_distance <= spells[pullSpell].range) { StopMoving(); - - if (!TargetValidation(tar)) { return; } - + SetPullingSpell(true); CastSpell(pullSpell, tar->GetID()); SetPullingSpell(false); return; } } - else { - if (atCombatRange) { - if (RuleB(Bots, AllowRangedPulling) && IsBotRanged() && ranged_timer.Check(false)) { - StopMoving(CalculateHeadingToTarget(tar->GetX(), tar->GetY())); - if (BotRangedAttack(tar) && CheckDoubleRangedAttack()) { - BotRangedAttack(tar, true); - } - - ranged_timer.Start(); - SetPullingSpell(false); - - return; - } - else if (RuleB(Bots, AllowAISpellPulling) && !IsBotNonSpellFighter() && !HOLDING && AI_HasSpells() && AI_EngagedCastCheck()) { - SetPullingSpell(false); - - return; - } - } - - return; - } + return; } // ENGAGED AT COMBAT RANGE diff --git a/zone/bot_commands/pull.cpp b/zone/bot_commands/pull.cpp index fa222fcfa..535743712 100644 --- a/zone/bot_commands/pull.cpp +++ b/zone/bot_commands/pull.cpp @@ -15,6 +15,12 @@ void bot_command_pull(Client *c, const Seperator *sep) std::string arg1 = sep->arg[1]; int ab_arg = 1; + std::string actionableArg = sep->arg[ab_arg]; + + if (actionableArg.empty()) { + actionableArg = "spawned"; + } + std::string class_race_arg = sep->arg[ab_arg]; bool class_race_check = false; @@ -24,7 +30,7 @@ void bot_command_pull(Client *c, const Seperator *sep) std::list sbl; - if (ActionableBots::PopulateSBL(c, sep->arg[ab_arg], sbl, ab_mask, !class_race_check ? sep->arg[ab_arg + 1] : nullptr, class_race_check ? atoi(sep->arg[ab_arg + 1]) : 0) == ActionableBots::ABT_None) { + if (ActionableBots::PopulateSBL(c, actionableArg, sbl, ab_mask, !class_race_check ? sep->arg[ab_arg + 1] : nullptr, class_race_check ? atoi(sep->arg[ab_arg + 1]) : 0) == ActionableBots::ABT_None) { return; }