/* EQEmu: EQEmulator
Copyright (C) 2001-2026 EQEmu Development Team
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#include "common/features.h"
#ifdef EMBPERL_XS_CLASSES
#include "common/rulesys.h"
#include "common/say_link.h"
#include "zone/embperl.h"
#include "zone/entity.h"
#include "zone/mob.h"
#include
Mob* Perl_EntityList_GetMobID(EntityList* self, uint16_t mob_id) // @categories Script Utility
{
return self->GetMobID(mob_id);
}
Mob* Perl_EntityList_GetMob(EntityList* self, const char* name)
{
return self->GetMob(name);
}
Mob* Perl_EntityList_GetMobByID(EntityList* self, uint16_t mob_id) // @categories Script Utility
{
return self->GetMob(mob_id);
}
Mob* Perl_EntityList_GetMobByNpcTypeID(EntityList* self, uint32_t npc_type_id) // @categories Script Utility
{
return self->GetMobByNpcTypeID(npc_type_id);
}
bool Perl_EntityList_IsMobSpawnedByNpcTypeID(EntityList* self, uint32_t npc_type_id) // @categories Script Utility
{
return self->IsMobSpawnedByNpcTypeID(npc_type_id);
}
NPC* Perl_EntityList_GetNPCByID(EntityList* self, uint16_t id) // @categories Script Utility
{
return self->GetNPCByID(id);
}
NPC* Perl_EntityList_GetNPCByNPCTypeID(EntityList* self, uint32_t npc_id) // @categories Script Utility
{
return self->GetNPCByNPCTypeID(npc_id);
}
NPC* Perl_EntityList_GetNPCBySpawnID(EntityList* self, uint32_t spawn_id) // @categories Script Utility, Spawns
{
return self->GetNPCBySpawnID(spawn_id);
}
Client* Perl_EntityList_GetClientByName(EntityList* self, const char* name) // @categories Account and Character, Script Utility
{
return self->GetClientByName(name);
}
Client* Perl_EntityList_GetClientByAccID(EntityList* self, uint32_t account_id) // @categories Account and Character, Script Utility
{
return self->GetClientByAccID(account_id);
}
Client* Perl_EntityList_GetClientByID(EntityList* self, uint16_t client_id) // @categories Account and Character, Script Utility
{
return self->GetClientByID(client_id);
}
Client* Perl_EntityList_GetClientByCharID(EntityList* self, uint32_t character_id) // @categories Account and Character, Script Utility
{
return self->GetClientByCharID(character_id);
}
Client* Perl_EntityList_GetClientByWID(EntityList* self, uint32_t wid) // @categories Account and Character, Script Utility
{
return self->GetClientByWID(wid);
}
Object* Perl_EntityList_GetObjectByDBID(EntityList* self, uint32_t database_id) // @categories Script Utility, Objects
{
return self->GetObjectByDBID(database_id);
}
Object* Perl_EntityList_GetObjectByID(EntityList* self, uint32_t entity_id) // @categories Script Utility, Objects
{
return self->GetObjectByID(entity_id);
}
Doors* Perl_EntityList_GetDoorsByDBID(EntityList* self, uint32_t database_id) // @categories Script Utility, Doors
{
return self->GetDoorsByDBID(database_id);
}
Doors* Perl_EntityList_GetDoorsByDoorID(EntityList* self, uint32_t door_id) // @categories Script Utility, Doors
{
return self->GetDoorsByDoorID(door_id);
}
Doors* Perl_EntityList_GetDoorsByID(EntityList* self, uint32_t entity_id) // @categories Script Utility, Doors
{
return self->GetDoorsByID(entity_id);
}
Doors* Perl_EntityList_FindDoor(EntityList* self, uint32_t door_id) // @categories Script Utility, Doors
{
return self->FindDoor(door_id);
}
Group* Perl_EntityList_GetGroupByMob(EntityList* self, Mob* mob) // @categories Account and Character, Script Utility, Group
{
return self->GetGroupByMob(mob);
}
Group* Perl_EntityList_GetGroupByClient(EntityList* self, Client* client) // @categories Account and Character, Script Utility, Group
{
return self->GetGroupByClient(client);
}
Group* Perl_EntityList_GetGroupByID(EntityList* self, uint32_t id) // @categories Account and Character, Script Utility, Group
{
return self->GetGroupByID(id);
}
Group* Perl_EntityList_GetGroupByLeaderName(EntityList* self, const char* leader_name) // @categories Account and Character, Script Utility, Group
{
return self->GetGroupByLeaderName(leader_name);
}
Raid* Perl_EntityList_GetRaidByID(EntityList* self, uint32_t id) // @categories Script Utility, Raid
{
return self->GetRaidByID(id);
}
Raid* Perl_EntityList_GetRaidByClient(EntityList* self, Client* client) // @categories Account and Character, Script Utility, Raid
{
return self->GetRaidByClient(client);
}
Corpse* Perl_EntityList_GetCorpseByOwner(EntityList* self, Client* client) // @categories Script Utility, Corpse
{
return self->GetCorpseByOwner(client);
}
Corpse* Perl_EntityList_GetCorpseByID(EntityList* self, uint16_t id) // @categories Script Utility, Corpse
{
return self->GetCorpseByID(id);
}
Corpse* Perl_EntityList_GetCorpseByName(EntityList* self, const char* name) // @categories Script Utility, Corpse
{
return self->GetCorpseByName(name);
}
void Perl_EntityList_ClearClientPetitionQueue(EntityList* self) // @categories Script Utility
{
self->ClearClientPetitionQueue();
}
bool Perl_EntityList_CanAddHateForMob(EntityList* self, Mob* target) // @categories Script Utility, Hate and Aggro
{
return self->CanAddHateForMob(target);
}
void Perl_EntityList_Clear(EntityList* self) // @categories Script Utility
{
self->Clear();
}
bool Perl_EntityList_RemoveMob(EntityList* self, uint16_t delete_id) // @categories Script Utility
{
return self->RemoveMob(delete_id);
}
bool Perl_EntityList_RemoveClient(EntityList* self, uint16_t delete_id) // @categories Account and Character, Script Utility
{
return self->RemoveClient(delete_id);
}
bool Perl_EntityList_RemoveNPC(EntityList* self, uint16_t delete_id) // @categories Script Utility
{
return self->RemoveNPC(delete_id);
}
bool Perl_EntityList_RemoveGroup(EntityList* self, uint32_t delete_id) // @categories Script Utility, Group
{
return self->RemoveGroup(delete_id);
}
bool Perl_EntityList_RemoveCorpse(EntityList* self, uint16_t delete_id) // @categories Corpse
{
return self->RemoveCorpse(delete_id);
}
bool Perl_EntityList_RemoveDoor(EntityList* self, uint16_t delete_id) // @categories Doors
{
return self->RemoveDoor(delete_id);
}
bool Perl_EntityList_RemoveTrap(EntityList* self, uint16_t delete_id) // @categories Script Utility
{
return self->RemoveTrap(delete_id);
}
bool Perl_EntityList_RemoveObject(EntityList* self, uint16_t delete_id) // @categories Script Utility, Objects
{
return self->RemoveObject(delete_id);
}
void Perl_EntityList_RemoveAllMobs(EntityList* self) // @categories Script Utility
{
self->RemoveAllMobs();
}
void Perl_EntityList_RemoveAllClients(EntityList* self) // @categories Script Utility
{
self->RemoveAllClients();
}
void Perl_EntityList_RemoveAllNPCs(EntityList* self) // @categories Script Utility
{
self->RemoveAllNPCs();
}
void Perl_EntityList_RemoveAllGroups(EntityList* self) // @categories Group
{
self->RemoveAllGroups();
}
void Perl_EntityList_RemoveAllCorpses(EntityList* self) // @categories Corpse
{
self->RemoveAllCorpses();
}
void Perl_EntityList_RemoveAllDoors(EntityList* self) // @categories Doors
{
self->RemoveAllDoors();
}
void Perl_EntityList_RemoveAllTraps(EntityList* self) // @categories Script Utility
{
self->RemoveAllTraps();
}
void Perl_EntityList_RemoveAllObjects(EntityList* self) // @categories Objects
{
self->RemoveAllObjects();
}
void Perl_EntityList_Message(EntityList* self, uint32 guild_id, uint32 color_type, const char* message) // @categories Script Utility
{
self->Message(guild_id, color_type, message);
}
void Perl_EntityList_MessageStatus(EntityList* self, uint32 guild_id, int to_minstatus, uint32 color_type, const char* message) // @categories Script Utility
{
self->MessageStatus(guild_id, to_minstatus, color_type, message);
}
void Perl_EntityList_MessageClose(EntityList* self, Mob* sender, bool skip_sender, float distance, uint32 color_type, const char* message)
{
if (RuleB(Chat, AutoInjectSaylinksToClientMessage))
{
std::string new_message = EQ::SayLinkEngine::InjectSaylinksIfNotExist(message);
self->MessageClose(sender, skip_sender, distance, color_type, new_message.c_str());
}
else
{
self->MessageClose(sender, skip_sender, distance, color_type, message);
}
}
void Perl_EntityList_RemoveFromTargets(EntityList* self, Mob* mob) // @categories Script Utility
{
self->RemoveFromTargets(mob);
}
void Perl_EntityList_ReplaceWithTarget(EntityList* self, Mob* old_mob, Mob* new_target) // @categories Script Utility
{
self->ReplaceWithTarget(old_mob, new_target);
}
void Perl_EntityList_OpenDoorsNear(EntityList* self, Mob* opener) // @categories Script Utility, Doors
{
self->OpenDoorsNear(opener);
}
std::string Perl_EntityList_MakeNameUnique(EntityList* self, char* name) // @categories Script Utility
{
char buf[64] = {0};
strn0cpy(buf, name, sizeof(buf));
return self->MakeNameUnique(buf); // todo: this function is unsafe
}
std::string Perl_EntityList_RemoveNumbers(EntityList* self, char* name)
{
char buf[64] = {0};
strn0cpy(buf, name, sizeof(buf));
return EntityList::RemoveNumbers(buf); // todo: this function is unsafe
}
void Perl_EntityList_SignalMobsByNPCID(EntityList* self, uint32 npc_type_id, int signal_id) // @categories Script Utility
{
self->SignalMobsByNPCID(npc_type_id, signal_id);
}
void Perl_EntityList_RemoveEntity(EntityList* self, uint16_t id) // @categories Script Utility
{
self->RemoveEntity(id);
}
uint32_t Perl_EntityList_DeleteNPCCorpses(EntityList* self) // @categories Corpse
{
return self->DeleteNPCCorpses();
}
uint32_t Perl_EntityList_DeletePlayerCorpses(EntityList* self) // @categories Account and Character, Corpse
{
return self->DeletePlayerCorpses();
}
void Perl_EntityList_HalveAggro(EntityList* self, Mob* who) // @categories Script Utility, Hate and Aggro
{
self->HalveAggro(who);
}
void Perl_EntityList_DoubleAggro(EntityList* self, Mob* who) // @categories Script Utility
{
self->DoubleAggro(who);
}
void Perl_EntityList_ClearFeignAggro(EntityList* self, Mob* target) // @categories Script Utility
{
self->ClearFeignAggro(target);
}
bool Perl_EntityList_Fighting(EntityList* self, Mob* target) // @categories Script Utility
{
return self->Fighting(target);
}
void Perl_EntityList_RemoveFromHateLists(EntityList* self, Mob* mob) // @categories Script Utility, Hate and Aggro
{
self->RemoveFromHateLists(mob);
}
void Perl_EntityList_RemoveFromHateLists(EntityList* self, Mob* mob, bool set_to_one) // @categories Script Utility, Hate and Aggro
{
self->RemoveFromHateLists(mob, set_to_one);
}
void Perl_EntityList_MessageGroup(EntityList* self, Mob* sender, bool skip_close, uint32_t emote_color_type, const char* message) // @categories Script Utility, Group
{
self->MessageGroup(sender, skip_close, emote_color_type, message);
}
Client* Perl_EntityList_GetRandomClient(EntityList* self) // @categories Account and Character, Script Utility
{
return self->GetRandomClient();
}
Client* Perl_EntityList_GetRandomClient(EntityList* self, float x, float y, float z, float distance) // @categories Account and Character, Script Utility
{
return self->GetRandomClient(glm::vec3(x, y, z), distance);
}
Client* Perl_EntityList_GetRandomClient(EntityList* self, float x, float y, float z, float distance, Client* exclude_client) // @categories Account and Character, Script Utility
{
return self->GetRandomClient(glm::vec3(x, y, z), distance, exclude_client);
}
perl::array Perl_EntityList_GetMobList(EntityList* self) // @categories Script Utility
{
perl::array result;
std::list mob_list;
entity_list.GetMobList(mob_list);
for (Mob* entry : mob_list)
{
result.push_back(entry);
}
return result;
}
perl::array Perl_EntityList_GetClientList(EntityList* self) // @categories Account and Character, Script Utility
{
perl::array result;
std::list client_list;
entity_list.GetClientList(client_list);
for (Client* entry : client_list)
{
result.push_back(entry);
}
return result;
}
Bot* Perl_EntityList_GetBotByID(EntityList* self, uint32_t bot_id) // @categories Script Utility, Bot
{
return self->GetBotByBotID(bot_id);
}
Bot* Perl_EntityList_GetBotByName(EntityList* self, std::string bot_name) // @categories Script Utility, Bot
{
return self->GetBotByBotName(bot_name);
}
Client* Perl_EntityList_GetBotOwnerByBotEntityID(EntityList* self, uint32_t entity_id) // @categories Script Utility, Bot
{
return self->GetBotOwnerByBotEntityID(entity_id);
}
Client* Perl_EntityList_GetBotOwnerByBotID(EntityList* self, uint32_t bot_id) // @categories Script Utility, Bot
{
return self->GetBotOwnerByBotID(bot_id);
}
perl::array Perl_EntityList_GetBotList(EntityList* self) // @categories Script Utility, Bot
{
perl::array result;
auto current_bot_list = self->GetBotList();
auto it = current_bot_list.begin();
while (it != current_bot_list.end()) {
result.push_back(it->second);
++it;
}
return result;
}
perl::array Perl_EntityList_GetBotListByCharacterID(EntityList* self, uint32_t character_id) // @categories Script Utility, Bot
{
perl::array result;
auto current_bot_list = self->GetBotListByCharacterID(character_id);
for (int i = 0; i < current_bot_list.size(); ++i)
{
result.push_back(current_bot_list[i]);
}
return result;
}
perl::array Perl_EntityList_GetBotListByCharacterID(EntityList* self, uint32_t character_id, uint8_t class_id) // @categories Script Utility, Bot
{
perl::array result;
auto current_bot_list = self->GetBotListByCharacterID(character_id, class_id);
for (int i = 0; i < current_bot_list.size(); ++i)
{
result.push_back(current_bot_list[i]);
}
return result;
}
perl::array Perl_EntityList_GetBotListByClientName(EntityList* self, std::string client_name) // @categories Script Utility, Bot
{
perl::array result;
auto current_bot_list = self->GetBotListByClientName(client_name);
for (int i = 0; i < current_bot_list.size(); ++i)
{
result.push_back(current_bot_list[i]);
}
return result;
}
perl::array Perl_EntityList_GetBotListByClientName(EntityList* self, std::string client_name, uint8 class_id) // @categories Script Utility, Bot
{
perl::array result;
auto current_bot_list = self->GetBotListByClientName(client_name, class_id);
for (int i = 0; i < current_bot_list.size(); ++i)
{
result.push_back(current_bot_list[i]);
}
return result;
}
void Perl_EntityList_SignalAllBotsByOwnerCharacterID(EntityList* self, uint32_t character_id, int signal_id) // @categories Script Utility
{
entity_list.SignalAllBotsByOwnerCharacterID(character_id, signal_id);
}
void Perl_EntityList_SignalAllBotsByOwnerName(EntityList* self, std::string owner_name, int signal_id) // @categories Script Utility
{
entity_list.SignalAllBotsByOwnerName(owner_name, signal_id);
}
void Perl_EntityList_SignalBotByBotID(EntityList* self, uint32_t bot_id, int signal_id) // @categories Script Utility
{
entity_list.SignalBotByBotID(bot_id, signal_id);
}
void Perl_EntityList_SignalBotByBotName(EntityList* self, std::string bot_name, int signal_id) // @categories Script Utility
{
entity_list.SignalBotByBotName(bot_name, signal_id);
}
perl::array Perl_EntityList_GetNPCList(EntityList* self) // @categories Script Utility
{
perl::array result;
std::list npc_list;
entity_list.GetNPCList(npc_list);
for (NPC* entry : npc_list)
{
result.push_back(entry);
}
return result;
}
perl::array Perl_EntityList_GetCorpseList(EntityList* self) // @categories Script Utility, Corpse
{
perl::array result;
std::list corpse_list;
entity_list.GetCorpseList(corpse_list);
for (Corpse* entry : corpse_list)
{
result.push_back(entry);
}
return result;
}
perl::array Perl_EntityList_GetObjectList(EntityList* self) // @categories Script Utility, Objects
{
perl::array result;
std::list