mirror of
https://github.com/EQEmu/Server.git
synced 2026-02-22 18:52:26 +00:00
[Quest API] Add GetHateListClosest(), GetHateListClosestBot(), GetHateListClosestClient(), and GetHateListClosestNPC() methods/overloads to Perl/Lua (#3359)
* Add HateListClosestClient available for scripting. * Add other methods. * Use pre-existing constants. * Typos * Update mob.h --------- Co-authored-by: Kinglykrab <kinglykrab@gmail.com>
This commit is contained in:
parent
fa55fd1664
commit
32f7dc3d1b
@ -155,28 +155,54 @@ Mob* HateList::GetDamageTopOnHateList(Mob* hater)
|
||||
return current;
|
||||
}
|
||||
|
||||
Mob* HateList::GetClosestEntOnHateList(Mob *hater, bool skip_mezzed) {
|
||||
Mob* HateList::GetClosestEntOnHateList(Mob *hater, bool skip_mezzed, EntityFilterType entity_type) {
|
||||
Mob* close_entity = nullptr;
|
||||
float close_distance = 99999.9f;
|
||||
float this_distance;
|
||||
|
||||
auto iterator = list.begin();
|
||||
while (iterator != list.end()) {
|
||||
if (skip_mezzed && (*iterator)->entity_on_hatelist->IsMezzed()) {
|
||||
++iterator;
|
||||
for (const auto& e : list) {
|
||||
if (!e->entity_on_hatelist) {
|
||||
continue;
|
||||
}
|
||||
|
||||
this_distance = DistanceSquaredNoZ((*iterator)->entity_on_hatelist->GetPosition(), hater->GetPosition());
|
||||
if ((*iterator)->entity_on_hatelist != nullptr && this_distance <= close_distance) {
|
||||
close_distance = this_distance;
|
||||
close_entity = (*iterator)->entity_on_hatelist;
|
||||
if (skip_mezzed && e->entity_on_hatelist->IsMezzed()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (entity_type) {
|
||||
case EntityFilterType::Bots:
|
||||
if (!e->entity_on_hatelist->IsBot()) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case EntityFilterType::Clients:
|
||||
if (!e->entity_on_hatelist->IsClient()) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case EntityFilterType::NPCs:
|
||||
if (!e->entity_on_hatelist->IsNPC()) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case EntityFilterType::All:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
this_distance = DistanceSquaredNoZ(e->entity_on_hatelist->GetPosition(), hater->GetPosition());
|
||||
if (this_distance <= close_distance) {
|
||||
close_distance = this_distance;
|
||||
close_entity = e->entity_on_hatelist;
|
||||
}
|
||||
++iterator;
|
||||
}
|
||||
|
||||
if ((!close_entity && hater->IsNPC()) || (close_entity && close_entity->DivineAura()))
|
||||
if (
|
||||
(!close_entity && hater->IsNPC()) ||
|
||||
(close_entity && close_entity->DivineAura())
|
||||
) {
|
||||
close_entity = hater->CastToNPC()->GetHateTop();
|
||||
}
|
||||
|
||||
return close_entity;
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ public:
|
||||
HateList();
|
||||
~HateList();
|
||||
|
||||
Mob *GetClosestEntOnHateList(Mob *hater, bool skip_mezzed = false);
|
||||
Mob *GetClosestEntOnHateList(Mob *hater, bool skip_mezzed = false, EntityFilterType entity_type = EntityFilterType::All);
|
||||
Mob *GetDamageTopOnHateList(Mob *hater); // didn't add 'skip_mezzed' due to calls being in ::Death()
|
||||
Mob *GetEntWithMostHateOnList(Mob *center, Mob *skip = nullptr, bool skip_mezzed = false);
|
||||
Mob *GetRandomEntOnHateList(bool skip_mezzed = false);
|
||||
|
||||
@ -2376,6 +2376,41 @@ Lua_Mob Lua_Mob::GetHateClosest() {
|
||||
return Lua_Mob(self->GetHateClosest());
|
||||
}
|
||||
|
||||
Lua_Mob Lua_Mob::GetHateClosest(bool skip_mezzed) {
|
||||
Lua_Safe_Call_Class(Lua_Mob);
|
||||
return Lua_Mob(self->GetHateClosest(skip_mezzed));
|
||||
}
|
||||
|
||||
Lua_Bot Lua_Mob::GetHateClosestBot() {
|
||||
Lua_Safe_Call_Class(Lua_Bot);
|
||||
return Lua_Bot(self->GetHateClosestBot());
|
||||
}
|
||||
|
||||
Lua_Bot Lua_Mob::GetHateClosestBot(bool skip_mezzed) {
|
||||
Lua_Safe_Call_Class(Lua_Bot);
|
||||
return Lua_Bot(self->GetHateClosestBot());
|
||||
}
|
||||
|
||||
Lua_Client Lua_Mob::GetHateClosestClient() {
|
||||
Lua_Safe_Call_Class(Lua_Client);
|
||||
return Lua_Client(self->GetHateClosestClient());
|
||||
}
|
||||
|
||||
Lua_Client Lua_Mob::GetHateClosestClient(bool skip_mezzed) {
|
||||
Lua_Safe_Call_Class(Lua_Client);
|
||||
return Lua_Client(self->GetHateClosestClient(skip_mezzed));
|
||||
}
|
||||
|
||||
Lua_NPC Lua_Mob::GetHateClosestNPC() {
|
||||
Lua_Safe_Call_Class(Lua_NPC);
|
||||
return Lua_NPC(self->GetHateClosestNPC());
|
||||
}
|
||||
|
||||
Lua_NPC Lua_Mob::GetHateClosestNPC(bool skip_mezzed) {
|
||||
Lua_Safe_Call_Class(Lua_NPC);
|
||||
return Lua_NPC(self->GetHateClosestNPC(skip_mezzed));
|
||||
}
|
||||
|
||||
Lua_HateList Lua_Mob::GetHateListByDistance() {
|
||||
Lua_Safe_Call_Class(Lua_HateList);
|
||||
Lua_HateList ret;
|
||||
@ -3253,7 +3288,14 @@ luabind::scope lua_register_mob() {
|
||||
.def("GetHaste", (int(Lua_Mob::*)(void))&Lua_Mob::GetHaste)
|
||||
.def("GetHateAmount", (int64(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetHateAmount)
|
||||
.def("GetHateAmount", (int64(Lua_Mob::*)(Lua_Mob,bool))&Lua_Mob::GetHateAmount)
|
||||
.def("GetHateClosest", &Lua_Mob::GetHateClosest)
|
||||
.def("GetHateClosest", (Lua_Mob(Lua_Mob::*)(void))&Lua_Mob::GetHateClosest)
|
||||
.def("GetHateClosest", (Lua_Mob(Lua_Mob::*)(bool))&Lua_Mob::GetHateClosest)
|
||||
.def("GetHateClosestBot", (Lua_Bot(Lua_Mob::*)(void))&Lua_Mob::GetHateClosestBot)
|
||||
.def("GetHateClosestBot", (Lua_Bot(Lua_Mob::*)(bool))&Lua_Mob::GetHateClosestBot)
|
||||
.def("GetHateClosestClient", (Lua_Client(Lua_Mob::*)(void))&Lua_Mob::GetHateClosestClient)
|
||||
.def("GetHateClosestClient", (Lua_Client(Lua_Mob::*)(bool))&Lua_Mob::GetHateClosestClient)
|
||||
.def("GetHateClosestNPC", (Lua_NPC(Lua_Mob::*)(void))&Lua_Mob::GetHateClosestNPC)
|
||||
.def("GetHateClosestNPC", (Lua_NPC(Lua_Mob::*)(bool))&Lua_Mob::GetHateClosestNPC)
|
||||
.def("GetHateDamageTop", (Lua_Mob(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetHateDamageTop)
|
||||
.def("GetHateList", &Lua_Mob::GetHateList)
|
||||
.def("GetHateListBots", (Lua_HateList(Lua_Mob::*)(void))&Lua_Mob::GetHateListBots)
|
||||
|
||||
@ -227,6 +227,13 @@ public:
|
||||
Lua_Client GetHateRandomClient();
|
||||
Lua_NPC GetHateRandomNPC();
|
||||
Lua_Mob GetHateClosest();
|
||||
Lua_Mob GetHateClosest(bool skip_mezzed);
|
||||
Lua_Bot GetHateClosestBot();
|
||||
Lua_Bot GetHateClosestBot(bool skip_mezzed);
|
||||
Lua_Client GetHateClosestClient();
|
||||
Lua_Client GetHateClosestClient(bool skip_mezzed);
|
||||
Lua_NPC GetHateClosestNPC();
|
||||
Lua_NPC GetHateClosestNPC(bool skip_mezzed);
|
||||
void AddToHateList(Lua_Mob other);
|
||||
void AddToHateList(Lua_Mob other, int64 hate);
|
||||
void AddToHateList(Lua_Mob other, int64 hate, int64 damage);
|
||||
|
||||
@ -732,7 +732,10 @@ public:
|
||||
NPC* GetHateRandomNPC() { return hate_list.GetRandomNPCOnHateList(); }
|
||||
Bot* GetHateRandomBot() { return hate_list.GetRandomBotOnHateList(); }
|
||||
Mob* GetHateMost() { return hate_list.GetEntWithMostHateOnList();}
|
||||
Mob* GetHateClosest() { return hate_list.GetClosestEntOnHateList(this); }
|
||||
Mob* GetHateClosest(bool skip_mezzed = false) { return hate_list.GetClosestEntOnHateList(this, skip_mezzed); }
|
||||
Bot* GetHateClosestBot(bool skip_mezzed = false) { return hate_list.GetClosestEntOnHateList(this, skip_mezzed, EntityFilterType::Bots)->CastToBot(); }
|
||||
Client* GetHateClosestClient(bool skip_mezzed = false) { return hate_list.GetClosestEntOnHateList(this, skip_mezzed, EntityFilterType::Clients)->CastToClient(); }
|
||||
NPC* GetHateClosestNPC(bool skip_mezzed = false) { return hate_list.GetClosestEntOnHateList(this, skip_mezzed, EntityFilterType::NPCs)->CastToNPC(); }
|
||||
bool IsEngaged() { return(!hate_list.IsHateListEmpty()); }
|
||||
bool HasPrimaryAggro() { return PrimaryAggro; }
|
||||
bool HasAssistAggro() { return AssistAggro; }
|
||||
|
||||
@ -2437,6 +2437,41 @@ Mob* Perl_Mob_GetHateClosest(Mob* self) // @categories Hate and Aggro
|
||||
return self->GetHateClosest();
|
||||
}
|
||||
|
||||
Mob* Perl_Mob_GetHateClosest(Mob* self, bool skip_mezzed) // @categories Hate and Aggro
|
||||
{
|
||||
return self->GetHateClosest(skip_mezzed);
|
||||
}
|
||||
|
||||
Bot* Perl_Mob_GetHateClosestBot(Mob* self) // @categories Hate and Aggro
|
||||
{
|
||||
return self->GetHateClosestBot();
|
||||
}
|
||||
|
||||
Bot* Perl_Mob_GetHateClosestBot(Mob* self, bool skip_mezzed) // @categories Hate and Aggro
|
||||
{
|
||||
return self->GetHateClosestBot(skip_mezzed);
|
||||
}
|
||||
|
||||
Client* Perl_Mob_GetHateClosestClient(Mob* self) // @categories Hate and Aggro
|
||||
{
|
||||
return self->GetHateClosestClient();
|
||||
}
|
||||
|
||||
Client* Perl_Mob_GetHateClosestClient(Mob* self, bool skip_mezzed) // @categories Hate and Aggro
|
||||
{
|
||||
return self->GetHateClosestClient(skip_mezzed);
|
||||
}
|
||||
|
||||
NPC* Perl_Mob_GetHateClosestNPC(Mob* self) // @categories Hate and Aggro
|
||||
{
|
||||
return self->GetHateClosestNPC();
|
||||
}
|
||||
|
||||
NPC* Perl_Mob_GetHateClosestNPC(Mob* self, bool skip_mezzed) // @categories Hate and Aggro
|
||||
{
|
||||
return self->GetHateClosestNPC(skip_mezzed);
|
||||
}
|
||||
|
||||
std::string Perl_Mob_GetLastName(Mob* self) // @categories Script Utility
|
||||
{
|
||||
return self->GetLastName();
|
||||
@ -3193,7 +3228,14 @@ void perl_register_mob()
|
||||
package.add("GetHaste", &Perl_Mob_GetHaste);
|
||||
package.add("GetHateAmount", (int64_t(*)(Mob*, Mob*))&Perl_Mob_GetHateAmount);
|
||||
package.add("GetHateAmount", (int64_t(*)(Mob*, Mob*, bool))&Perl_Mob_GetHateAmount);
|
||||
package.add("GetHateClosest", &Perl_Mob_GetHateClosest);
|
||||
package.add("GetHateClosest", (Mob*(*)(Mob*))&Perl_Mob_GetHateClosest);
|
||||
package.add("GetHateClosest", (Mob*(*)(Mob*, bool))&Perl_Mob_GetHateClosest);
|
||||
package.add("GetHateClosestBot", (Bot*(*)(Mob*))&Perl_Mob_GetHateClosestBot);
|
||||
package.add("GetHateClosestBot", (Bot*(*)(Mob*, bool))&Perl_Mob_GetHateClosestBot);
|
||||
package.add("GetHateClosestClient", (Client*(*)(Mob*))&Perl_Mob_GetHateClosestClient);
|
||||
package.add("GetHateClosestClient", (Client*(*)(Mob*, bool))&Perl_Mob_GetHateClosestClient);
|
||||
package.add("GetHateClosestNPC", (NPC*(*)(Mob*))&Perl_Mob_GetHateClosestNPC);
|
||||
package.add("GetHateClosestNPC", (NPC*(*)(Mob*, bool))&Perl_Mob_GetHateClosestNPC);
|
||||
package.add("GetHateDamageTop", &Perl_Mob_GetHateDamageTop);
|
||||
package.add("GetHateList", &Perl_Mob_GetHateList);
|
||||
package.add("GetHateListBots", (perl::array(*)(Mob*))&Perl_Mob_GetHateListBots);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user