Skip to content

Commit

Permalink
Fix possible crash when a qualifier has a value of "0" or "1" and get…
Browse files Browse the repository at this point in the history
…s corrupted when converted to a qualified string
  • Loading branch information
davidonete committed Jul 27, 2023
1 parent b7b3c17 commit b039282
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 9 deletions.
27 changes: 21 additions & 6 deletions playerbot/strategy/NamedObjectContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,30 @@ namespace ai
string getQualifier() { return qualifier; }
void Reset() { qualifier.clear(); }

static string MultiQualify(vector<string> qualifiers, const string& separator, const string_view brackets = "{}")
static string MultiQualify(const vector<string>& qualifiers, const string& separator, const string_view brackets = "{}")
{
ostringstream out;
for (auto& qualifier : qualifiers)
stringstream out;
for (uint8 i = 0; i < qualifiers.size(); i++)
{
out << qualifier << (&qualifier != &qualifiers.back() ? separator : "");
const string& qualifier = qualifiers[i];
if (i == qualifiers.size() - 1)
{
out << qualifier;
}
else
{
out << qualifier << separator;
}
}

if (brackets.empty())
{
return out.str();
}
else
{
return brackets[0] + out.str() + brackets[1];
}

return brackets[0] + out.str() + brackets[1];
}

static vector<string> getMultiQualifiers(const string& qualifier1, const string& separator, const string_view brackets = "{}")
Expand Down
4 changes: 2 additions & 2 deletions playerbot/strategy/generic/MeleeCombatStrategy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ void MeleeCombatStrategy::InitCombatTriggers(list<TriggerNode*> &triggers)

triggers.push_back(new TriggerNode(
"enemy too close for melee",
NextAction::array(0, new NextAction("move out of enemy contact", ACTION_NORMAL + 8), NULL)));
NextAction::array(0, new NextAction("move out of enemy contact", ACTION_NORMAL + 8.0f), NULL)));
}

void SetBehindCombatStrategy::InitCombatTriggers(list<TriggerNode*> &triggers)
{
triggers.push_back(new TriggerNode(
"not behind target",
NextAction::array(0, new NextAction("set behind", 59.0f), NULL)));
NextAction::array(0, new NextAction("set behind", ACTION_MOVE + 5.0f), NULL)));
}
3 changes: 2 additions & 1 deletion playerbot/strategy/values/AttackersValue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ void AttackersValue::AddTargetsOf(Player* player, set<Unit*>& targets, set<Objec
const string ignoreValidate = std::to_string(true);
const string range = std::to_string((int32)GetRange());
const vector<string> qualifiers = { range, ignoreValidate };
for (auto guid : PAI_VALUE2(list<ObjectGuid>, "possible targets", Qualified::MultiQualify(qualifiers, ":")))
const list<ObjectGuid> possibleTargets = PAI_VALUE2(list<ObjectGuid>, "possible targets", Qualified::MultiQualify(qualifiers, ":"));
for (const ObjectGuid& guid : possibleTargets)
{
if (Unit* unit = ai->GetUnit(guid))
{
Expand Down

0 comments on commit b039282

Please sign in to comment.