mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-26 22:02: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;
|
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;
|
Mob* close_entity = nullptr;
|
||||||
float close_distance = 99999.9f;
|
float close_distance = 99999.9f;
|
||||||
float this_distance;
|
float this_distance;
|
||||||
|
|
||||||
auto iterator = list.begin();
|
for (const auto& e : list) {
|
||||||
while (iterator != list.end()) {
|
if (!e->entity_on_hatelist) {
|
||||||
if (skip_mezzed && (*iterator)->entity_on_hatelist->IsMezzed()) {
|
|
||||||
++iterator;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
this_distance = DistanceSquaredNoZ((*iterator)->entity_on_hatelist->GetPosition(), hater->GetPosition());
|
if (skip_mezzed && e->entity_on_hatelist->IsMezzed()) {
|
||||||
if ((*iterator)->entity_on_hatelist != nullptr && this_distance <= close_distance) {
|
continue;
|
||||||
close_distance = this_distance;
|
}
|
||||||
close_entity = (*iterator)->entity_on_hatelist;
|
|
||||||
|
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();
|
close_entity = hater->CastToNPC()->GetHateTop();
|
||||||
|
}
|
||||||
|
|
||||||
return close_entity;
|
return close_entity;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,7 +41,7 @@ public:
|
|||||||
HateList();
|
HateList();
|
||||||
~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 *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 *GetEntWithMostHateOnList(Mob *center, Mob *skip = nullptr, bool skip_mezzed = false);
|
||||||
Mob *GetRandomEntOnHateList(bool skip_mezzed = false);
|
Mob *GetRandomEntOnHateList(bool skip_mezzed = false);
|
||||||
|
|||||||
@ -2376,6 +2376,41 @@ Lua_Mob Lua_Mob::GetHateClosest() {
|
|||||||
return Lua_Mob(self->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_HateList Lua_Mob::GetHateListByDistance() {
|
||||||
Lua_Safe_Call_Class(Lua_HateList);
|
Lua_Safe_Call_Class(Lua_HateList);
|
||||||
Lua_HateList ret;
|
Lua_HateList ret;
|
||||||
@ -3253,7 +3288,14 @@ luabind::scope lua_register_mob() {
|
|||||||
.def("GetHaste", (int(Lua_Mob::*)(void))&Lua_Mob::GetHaste)
|
.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))&Lua_Mob::GetHateAmount)
|
||||||
.def("GetHateAmount", (int64(Lua_Mob::*)(Lua_Mob,bool))&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("GetHateDamageTop", (Lua_Mob(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetHateDamageTop)
|
||||||
.def("GetHateList", &Lua_Mob::GetHateList)
|
.def("GetHateList", &Lua_Mob::GetHateList)
|
||||||
.def("GetHateListBots", (Lua_HateList(Lua_Mob::*)(void))&Lua_Mob::GetHateListBots)
|
.def("GetHateListBots", (Lua_HateList(Lua_Mob::*)(void))&Lua_Mob::GetHateListBots)
|
||||||
|
|||||||
@ -227,6 +227,13 @@ public:
|
|||||||
Lua_Client GetHateRandomClient();
|
Lua_Client GetHateRandomClient();
|
||||||
Lua_NPC GetHateRandomNPC();
|
Lua_NPC GetHateRandomNPC();
|
||||||
Lua_Mob GetHateClosest();
|
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);
|
||||||
void AddToHateList(Lua_Mob other, int64 hate);
|
void AddToHateList(Lua_Mob other, int64 hate);
|
||||||
void AddToHateList(Lua_Mob other, int64 hate, int64 damage);
|
void AddToHateList(Lua_Mob other, int64 hate, int64 damage);
|
||||||
|
|||||||
@ -732,7 +732,10 @@ public:
|
|||||||
NPC* GetHateRandomNPC() { return hate_list.GetRandomNPCOnHateList(); }
|
NPC* GetHateRandomNPC() { return hate_list.GetRandomNPCOnHateList(); }
|
||||||
Bot* GetHateRandomBot() { return hate_list.GetRandomBotOnHateList(); }
|
Bot* GetHateRandomBot() { return hate_list.GetRandomBotOnHateList(); }
|
||||||
Mob* GetHateMost() { return hate_list.GetEntWithMostHateOnList();}
|
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 IsEngaged() { return(!hate_list.IsHateListEmpty()); }
|
||||||
bool HasPrimaryAggro() { return PrimaryAggro; }
|
bool HasPrimaryAggro() { return PrimaryAggro; }
|
||||||
bool HasAssistAggro() { return AssistAggro; }
|
bool HasAssistAggro() { return AssistAggro; }
|
||||||
|
|||||||
@ -2437,6 +2437,41 @@ Mob* Perl_Mob_GetHateClosest(Mob* self) // @categories Hate and Aggro
|
|||||||
return self->GetHateClosest();
|
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
|
std::string Perl_Mob_GetLastName(Mob* self) // @categories Script Utility
|
||||||
{
|
{
|
||||||
return self->GetLastName();
|
return self->GetLastName();
|
||||||
@ -3193,7 +3228,14 @@ void perl_register_mob()
|
|||||||
package.add("GetHaste", &Perl_Mob_GetHaste);
|
package.add("GetHaste", &Perl_Mob_GetHaste);
|
||||||
package.add("GetHateAmount", (int64_t(*)(Mob*, Mob*))&Perl_Mob_GetHateAmount);
|
package.add("GetHateAmount", (int64_t(*)(Mob*, Mob*))&Perl_Mob_GetHateAmount);
|
||||||
package.add("GetHateAmount", (int64_t(*)(Mob*, Mob*, bool))&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("GetHateDamageTop", &Perl_Mob_GetHateDamageTop);
|
||||||
package.add("GetHateList", &Perl_Mob_GetHateList);
|
package.add("GetHateList", &Perl_Mob_GetHateList);
|
||||||
package.add("GetHateListBots", (perl::array(*)(Mob*))&Perl_Mob_GetHateListBots);
|
package.add("GetHateListBots", (perl::array(*)(Mob*))&Perl_Mob_GetHateListBots);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user