[Quest API] Add GetCloseMobList() and CalculateDistance() overload to Perl/Lua (#3455)

* [Quest API] Add GetCloseMobList() and CalculateDistance() overload to Perl/Lua

# Perl
- Add `$entity_list->GetCloseMobList(mob)`.
- Add `$entity_list->GetCloseMobList(mob, distance)`.
- Add `$mob->CalculateDistance(mob)`.
- Add `$mob->GetCloseMobList()`.
- Add `$mob->GetCloseMobList(distance)`.

# Lua
- Add `eq.get_entity_list():GetCloseMobList(mob)`.
- Add `eq.get_entity_list():GetCloseMobList(mob, distance)`.
- Add `mob:CalculateDistance(mob)`.
- Add `mob:GetCloseMobList()`.
- Add `mob:GetCloseMobList(distance)`.

* Ignore Self

* Update lua_entity_list.cpp

* Cleanup
This commit is contained in:
Alex King
2023-07-02 10:55:27 -04:00
committed by GitHub
parent 6a80bcecc7
commit 728ce0c519
9 changed files with 270 additions and 3 deletions
+63 -1
View File
@@ -1374,6 +1374,11 @@ float Perl_Mob_CalculateDistance(Mob* self, float x, float y, float z) // @categ
return self->CalculateDistance(x, y, z);
}
float Perl_Mob_CalculateDistance(Mob* self, Mob* mob) // @categories Script Utility
{
return self->CalculateDistance(mob);
}
void Perl_Mob_SendTo(Mob* self, float new_x, float new_y, float new_z) // @categories Script Utility
{
self->SendTo(new_x, new_y, new_z);
@@ -3005,6 +3010,59 @@ bool Perl_Mob_HasSpellEffect(Mob* self, int effect_id)
return self->HasSpellEffect(effect_id);
}
perl::array Perl_Mob_GetCloseMobList(Mob* self)
{
perl::array result;
const auto& l = entity_list.GetCloseMobList(self);
result.reserve(l.size());
for (const auto& e : l) {
result.push_back(e.second);
}
return result;
}
perl::array Perl_Mob_GetCloseMobList(Mob* self, float distance)
{
perl::array result;
const auto& l = entity_list.GetCloseMobList(self, distance);
result.reserve(l.size());
for (const auto& e : l) {
if (self->CalculateDistance(e.second) <= distance) {
result.push_back(e.second);
}
}
return result;
}
perl::array Perl_Mob_GetCloseMobList(Mob* self, float distance, bool ignore_self)
{
perl::array result;
const auto& l = entity_list.GetCloseMobList(self, distance);
result.reserve(l.size());
for (const auto& e : l) {
if (ignore_self && e.second == self) {
continue;
}
if (self->CalculateDistance(e.second) <= distance) {
result.push_back(e.second);
}
}
return result;
}
StatBonuses* Perl_Mob_GetAABonuses(Mob* self)
{
return self->GetAABonusesPtr();
@@ -3050,7 +3108,8 @@ void perl_register_mob()
package.add("BuffFadeBySlot", (void(*)(Mob*, int))&Perl_Mob_BuffFadeBySlot);
package.add("BuffFadeBySlot", (void(*)(Mob*, int, bool))&Perl_Mob_BuffFadeBySlot);
package.add("BuffFadeBySpellID", &Perl_Mob_BuffFadeBySpellID);
package.add("CalculateDistance", &Perl_Mob_CalculateDistance);
package.add("CalculateDistance", (float(*)(Mob*, float, float, float))&Perl_Mob_CalculateDistance);
package.add("CalculateDistance", (float(*)(Mob*, Mob*))&Perl_Mob_CalculateDistance);
package.add("CalculateHeadingToTarget", &Perl_Mob_CalculateHeadingToTarget);
package.add("CameraEffect", (void(*)(Mob*, uint32))&Perl_Mob_CameraEffect);
package.add("CameraEffect", (void(*)(Mob*, uint32, float))&Perl_Mob_CameraEffect);
@@ -3211,6 +3270,9 @@ void perl_register_mob()
package.add("GetClassLevelFactor", &Perl_Mob_GetClassLevelFactor);
package.add("GetClassName", &Perl_Mob_GetClassName);
package.add("GetCleanName", &Perl_Mob_GetCleanName);
package.add("GetCloseMobList", (perl::array(*)(Mob*))&Perl_Mob_GetCloseMobList);
package.add("GetCloseMobList", (perl::array(*)(Mob*, float))&Perl_Mob_GetCloseMobList);
package.add("GetCloseMobList", (perl::array(*)(Mob*, float, bool))&Perl_Mob_GetCloseMobList);
package.add("GetCorruption", &Perl_Mob_GetCorruption);
package.add("GetDefaultRaceSize", (float(*)(Mob*))&Perl_Mob_GetDefaultRaceSize);
package.add("GetDefaultRaceSize", (float(*)(Mob*, int))&Perl_Mob_GetDefaultRaceSize);