mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 13:41:31 +00:00
# Notes - Separate all bot commands into individual files like regular commands. # Images
92 lines
2.2 KiB
C++
92 lines
2.2 KiB
C++
#include "../bot_command.h"
|
|
|
|
void bot_command_aggressive(Client* c, const Seperator* sep)
|
|
{
|
|
bcst_list* local_list = &bot_command_spells[BCEnum::SpT_Stance];
|
|
if (helper_spell_list_fail(c, local_list, BCEnum::SpT_Stance) ||
|
|
helper_command_alias_fail(c, "bot_command_aggressive", sep->arg[0], "aggressive")) {
|
|
return;
|
|
}
|
|
if (helper_is_help_or_usage(sep->arg[1])) {
|
|
c->Message(
|
|
Chat::White,
|
|
"usage: %s ([actionable: target | byname | ownergroup | ownerraid | targetgroup | namesgroup | healrotationtargets | byclass | byrace | spawned] ([actionable_name]))",
|
|
sep->arg[0]
|
|
);
|
|
helper_send_usage_required_bots(c, BCEnum::SpT_Stance);
|
|
return;
|
|
}
|
|
const int ab_mask = ActionableBots::ABM_Type1;
|
|
|
|
std::string class_race_arg = sep->arg[1];
|
|
bool class_race_check = false;
|
|
if (!class_race_arg.compare("byclass") || !class_race_arg.compare("byrace")) {
|
|
class_race_check = true;
|
|
}
|
|
|
|
std::list<Bot*> sbl;
|
|
if (ActionableBots::PopulateSBL(
|
|
c,
|
|
sep->arg[1],
|
|
sbl,
|
|
ab_mask,
|
|
!class_race_check ? sep->arg[2] : nullptr,
|
|
class_race_check ? atoi(sep->arg[2]) : 0
|
|
) == ActionableBots::ABT_None) {
|
|
return;
|
|
}
|
|
|
|
sbl.remove(nullptr);
|
|
|
|
int success_count = 0;
|
|
int candidate_count = sbl.size();
|
|
for (auto list_iter: *local_list) {
|
|
if (sbl.empty()) {
|
|
break;
|
|
}
|
|
|
|
auto local_entry = list_iter->SafeCastToStance();
|
|
if (helper_spell_check_fail(local_entry)) {
|
|
continue;
|
|
}
|
|
if (local_entry->stance_type != BCEnum::StT_Aggressive) {
|
|
continue;
|
|
}
|
|
|
|
for (auto bot_iter = sbl.begin(); bot_iter != sbl.end();) {
|
|
Bot* my_bot = *bot_iter;
|
|
if (local_entry->caster_class != my_bot->GetClass()) {
|
|
++bot_iter;
|
|
continue;
|
|
}
|
|
if (local_entry->spell_level > my_bot->GetLevel()) {
|
|
++bot_iter;
|
|
continue;
|
|
}
|
|
|
|
my_bot->InterruptSpell();
|
|
if (candidate_count == 1) {
|
|
Bot::BotGroupSay(
|
|
my_bot,
|
|
fmt::format(
|
|
"Using {}.",
|
|
spells[local_entry->spell_id].name
|
|
).c_str()
|
|
);
|
|
}
|
|
|
|
my_bot->UseDiscipline(local_entry->spell_id, my_bot->GetID());
|
|
++success_count;
|
|
|
|
bot_iter = sbl.erase(bot_iter);
|
|
}
|
|
}
|
|
|
|
c->Message(
|
|
Chat::White,
|
|
"%i of %i bots have attempted to use aggressive disciplines",
|
|
success_count,
|
|
candidate_count
|
|
);
|
|
}
|