mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 12:41:30 +00:00
[Quest API] Add GetMemberRole() to Perl/Lua (#4963)
* Add group member role retrieval * Expose group member role to Lua * Cleanup * Cleanup --------- Co-authored-by: Kinglykrab <kinglykrab@gmail.com>
This commit is contained in:
parent
323a0c0b27
commit
b8884d6572
@ -2472,19 +2472,63 @@ bool Group::AmIPuller(const char *mob_name)
|
||||
return !((bool)PullerName.compare(mob_name));
|
||||
}
|
||||
|
||||
bool Group::HasRole(Mob *m, uint8 Role)
|
||||
bool Group::HasRole(Mob* m, uint8 Role)
|
||||
{
|
||||
if(!m)
|
||||
if (!m) {
|
||||
return false;
|
||||
|
||||
for(uint32 i = 0; i < MAX_GROUP_MEMBERS; ++i)
|
||||
{
|
||||
if((m == members[i]) && (MemberRoles[i] & Role))
|
||||
return true;
|
||||
}
|
||||
|
||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; ++i) {
|
||||
if (m == members[i] && MemberRoles[i] & Role) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
uint8 Group::GetMemberRole(Mob* m)
|
||||
{
|
||||
if (!m) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; ++i) {
|
||||
if (m == members[i]) {
|
||||
uint8 role = MemberRoles[i];
|
||||
|
||||
if (m == leader) {
|
||||
role |= RoleLeader;
|
||||
}
|
||||
|
||||
return role;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8 Group::GetMemberRole(const char* name)
|
||||
{
|
||||
if (!name) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; ++i) {
|
||||
if (!strcasecmp(membername[i], name)) {
|
||||
uint8 role = MemberRoles[i];
|
||||
|
||||
if (leader && !strcasecmp(leader->GetName(), name)) {
|
||||
role |= RoleLeader;
|
||||
}
|
||||
|
||||
return role;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Group::QueueClients(Mob *sender, const EQApplicationPacket *app, bool ack_required /*= true*/, bool ignore_sender /*= true*/, float distance /*= 0*/) {
|
||||
if (sender && sender->IsClient()) {
|
||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++) {
|
||||
|
||||
@ -30,7 +30,12 @@ class Mob;
|
||||
|
||||
#define MAX_MARKED_NPCS 3
|
||||
|
||||
enum { RoleAssist = 1, RoleTank = 2, RolePuller = 4 };
|
||||
enum {
|
||||
RoleAssist = 1,
|
||||
RoleTank = 2,
|
||||
RolePuller = 4,
|
||||
RoleLeader = 8
|
||||
};
|
||||
|
||||
class GroupIDConsumer {
|
||||
public:
|
||||
@ -119,6 +124,8 @@ public:
|
||||
void SetGroupTankTarget(Mob *m);
|
||||
void SetGroupPullerTarget(Mob *m);
|
||||
bool HasRole(Mob *m, uint8 Role);
|
||||
uint8 GetMemberRole(Mob* m);
|
||||
uint8 GetMemberRole(const char* name);
|
||||
void NotifyAssistTarget(Client *c);
|
||||
void NotifyTankTarget(Client *c);
|
||||
void NotifyPullerTarget(Client *c);
|
||||
|
||||
@ -122,6 +122,16 @@ Lua_Mob Lua_Group::GetMember(int member_index) {
|
||||
return self->members[member_index];
|
||||
}
|
||||
|
||||
uint8 Lua_Group::GetMemberRole(Lua_Mob member) {
|
||||
Lua_Safe_Call_Int();
|
||||
return self->GetMemberRole(member);
|
||||
}
|
||||
|
||||
uint8 Lua_Group::GetMemberRole(const char* name) {
|
||||
Lua_Safe_Call_Int();
|
||||
return self->GetMemberRole(name);
|
||||
}
|
||||
|
||||
bool Lua_Group::DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name)
|
||||
{
|
||||
Lua_Safe_Call_Bool();
|
||||
@ -155,6 +165,8 @@ luabind::scope lua_register_group() {
|
||||
.def("GetLeaderName", (const char*(Lua_Group::*)(void))&Lua_Group::GetLeaderName)
|
||||
.def("GetLowestLevel", (uint32(Lua_Group::*)(void))&Lua_Group::GetLowestLevel)
|
||||
.def("GetMember", (Lua_Mob(Lua_Group::*)(int))&Lua_Group::GetMember)
|
||||
.def("GetMemberRole", (uint8(Lua_Group::*)(Lua_Mob))&Lua_Group::GetMemberRole)
|
||||
.def("GetMemberRole", (uint8(Lua_Group::*)(const char*))&Lua_Group::GetMemberRole)
|
||||
.def("GetTotalGroupDamage", (uint32(Lua_Group::*)(Lua_Mob))&Lua_Group::GetTotalGroupDamage)
|
||||
.def("GroupCount", (int(Lua_Group::*)(void))&Lua_Group::GroupCount)
|
||||
.def("GroupMessage", (void(Lua_Group::*)(Lua_Mob,const char*))&Lua_Group::GroupMessage)
|
||||
|
||||
@ -49,6 +49,8 @@ public:
|
||||
void TeleportGroup(Lua_Mob sender, uint32 zone_id, uint32 instance_id, float x, float y, float z, float h);
|
||||
int GetID();
|
||||
Lua_Mob GetMember(int member_index);
|
||||
uint8 GetMemberRole(Lua_Mob member);
|
||||
uint8 GetMemberRole(const char* name);
|
||||
bool DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name);
|
||||
bool DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name, int max_check_count);
|
||||
};
|
||||
|
||||
@ -127,6 +127,16 @@ Client* Perl_Group_GetMember(Group* self, int member_index) // @categories Accou
|
||||
return member ? member->CastToClient() : nullptr;
|
||||
}
|
||||
|
||||
uint8_t Perl_Group_GetMemberRole(Group* self, Mob* member) // @categories Account and Character, Script Utility, Group
|
||||
{
|
||||
return self->GetMemberRole(member);
|
||||
}
|
||||
|
||||
uint8_t Perl_Group_GetMemberRole(Group* self, const char* name) // @categories Account and Character, Script Utility, Group
|
||||
{
|
||||
return self->GetMemberRole(name);
|
||||
}
|
||||
|
||||
bool Perl_Group_DoesAnyMemberHaveExpeditionLockout(Group* self, std::string expedition_name, std::string event_name)
|
||||
{
|
||||
return self->AnyMemberHasDzLockout(expedition_name, event_name);
|
||||
@ -163,6 +173,8 @@ void perl_register_group()
|
||||
package.add("GetLeaderName", &Perl_Group_GetLeaderName);
|
||||
package.add("GetLowestLevel", &Perl_Group_GetLowestLevel);
|
||||
package.add("GetMember", &Perl_Group_GetMember);
|
||||
package.add("GetMemberRole", (uint8_t(*)(Group*, Mob*))&Perl_Group_GetMemberRole);
|
||||
package.add("GetMemberRole", (uint8_t(*)(Group*, const char*))&Perl_Group_GetMemberRole);
|
||||
package.add("GetTotalGroupDamage", &Perl_Group_GetTotalGroupDamage);
|
||||
package.add("GroupCount", &Perl_Group_GroupCount);
|
||||
package.add("GroupMessage", (void(*)(Group*, Mob*, const char*))&Perl_Group_GroupMessage);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user