Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions zone/groups.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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*/) {
Expand Down
4 changes: 3 additions & 1 deletion zone/groups.h
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -119,6 +119,8 @@ class Group : public GroupIDConsumer {
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);
Expand Down
16 changes: 14 additions & 2 deletions zone/lua_group.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -154,8 +164,10 @@ luabind::scope lua_register_group() {
.def("GetLeader", (Lua_Mob(Lua_Group::*)(void))&Lua_Group::GetLeader)
.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("GetTotalGroupDamage", (uint32(Lua_Group::*)(Lua_Mob))&Lua_Group::GetTotalGroupDamage)
.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)
.def("GroupMessage", (void(Lua_Group::*)(Lua_Mob,uint8,const char*))&Lua_Group::GroupMessage)
Expand Down
10 changes: 6 additions & 4 deletions zone/lua_group.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,12 @@ class Lua_Group : public Lua_Ptr<Group>
uint32 GetHighestLevel();
uint32 GetLowestLevel();
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);
bool DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name);
bool DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name, int max_check_count);
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);
};

#endif
Expand Down
18 changes: 15 additions & 3 deletions zone/perl_groups.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down