Add group member role retrieval

This commit is contained in:
Bemvaras 2025-07-01 15:05:39 -06:00
parent 2e760d6397
commit d79134b19e
3 changed files with 64 additions and 12 deletions

View File

@ -2474,15 +2474,53 @@ bool Group::AmIPuller(const char *mob_name)
bool Group::HasRole(Mob *m, uint8 Role)
{
if(!m)
return false;
if(!m)
return false;
for(uint32 i = 0; i < MAX_GROUP_MEMBERS; ++i)
{
if((m == members[i]) && (MemberRoles[i] & Role))
return true;
}
return false;
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*/) {

View File

@ -30,7 +30,7 @@ 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 +119,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);

View File

@ -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);
@ -161,9 +171,11 @@ void perl_register_group()
package.add("GetID", &Perl_Group_GetID);
package.add("GetLeader", &Perl_Group_GetLeader);
package.add("GetLeaderName", &Perl_Group_GetLeaderName);
package.add("GetLowestLevel", &Perl_Group_GetLowestLevel);
package.add("GetMember", &Perl_Group_GetMember);
package.add("GetTotalGroupDamage", &Perl_Group_GetTotalGroupDamage);
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);
package.add("GroupMessage", (void(*)(Group*, Mob*, uint8_t, const char*))&Perl_Group_GroupMessage);