[Quest API] Add Group/Raid Overloads to Perl/Lua. (#2587)

# Perl
- Add `$group->IsGroupMember(name)`.
- Add `$group->IsLeader(name)`.
- Add `$raid->IsRaidMember(c)`.
- Add `$raid->IsGroupLeader(c)`.

# Lua
- Add `group:IsGroupMember(name)`.
- Add `group:IsLeader(name)`.
- Add `raid:IsGroupLeader(client)`.
- Add `raid:IsLeader(client)`.
- Add `raid:IsRaidMember(client)`.

# Notes
- Adds overloads to these methods allowing operators to get by name or reference.
This commit is contained in:
Alex King 2022-11-27 15:57:01 -05:00 committed by GitHub
parent 29247a0f45
commit d0e7e8c4c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 155 additions and 54 deletions

View File

@ -833,26 +833,28 @@ void Group::CastGroupSpell(Mob* caster, uint16 spell_id) {
disbandcheck = true;
}
bool Group::IsGroupMember(Mob* client)
bool Group::IsGroupMember(Mob* c)
{
bool Result = false;
if(client) {
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++) {
if (members[i] == client)
Result = true;
}
}
return Result;
}
bool Group::IsGroupMember(const char *Name)
{
if(Name)
for(uint32 i = 0; i < MAX_GROUP_MEMBERS; i++)
if((strlen(Name) == strlen(membername[i])) && !strncmp(membername[i], Name, strlen(Name)))
if (c) {
for (const auto &m: members) {
if (m == c) {
return true;
}
}
}
return false;
}
bool Group::IsGroupMember(const char *name)
{
if (name) {
for (const auto& m : membername) {
if (!strcmp(m, name)) {
return true;
}
}
}
return false;
}
@ -2474,3 +2476,15 @@ bool Group::DoesAnyMemberHaveExpeditionLockout(
}
return false;
}
bool Group::IsLeader(const char* name) {
if (name) {
for (const auto& m : membername) {
if (!strcmp(m, name)) {
return true;
}
}
}
return false;
}

View File

@ -65,8 +65,8 @@ public:
#ifdef BOTS
void GetBotList(std::list<Bot*>& bot_list, bool clear_list = true);
#endif
bool IsGroupMember(Mob* client);
bool IsGroupMember(const char *Name);
bool IsGroupMember(Mob* c);
bool IsGroupMember(const char* name);
bool Process();
bool IsGroup() { return true; }
void SendGroupJoinOOZ(Mob* NewMember);
@ -76,7 +76,7 @@ public:
void GroupMessageString(Mob* sender, uint32 type, uint32 string_id, const char* message,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0, uint32 distance = 0);
uint32 GetTotalGroupDamage(Mob* other);
void SplitMoney(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, Client *splitter = nullptr);
inline void SetLeader(Mob* newleader){ leader=newleader; };
inline void SetLeader(Mob* c){ leader = c; };
inline Mob* GetLeader() { return leader; };
const char* GetLeaderName() { return membername[0]; };
void SendHPManaEndPacketsTo(Mob* newmember);
@ -85,7 +85,8 @@ public:
void SendEndurancePacketFrom(Mob* member);
bool UpdatePlayer(Mob* update);
void MemberZoned(Mob* removemob);
inline bool IsLeader(Mob* leadertest) { return leadertest==leader; };
bool IsLeader(const char* name);
inline bool IsLeader(Mob* m) { return m == leader; };
uint8 GroupCount();
uint32 GetHighestLevel();
uint32 GetLowestLevel();

View File

@ -19,9 +19,14 @@ void Lua_Group::DisbandGroup() {
self->DisbandGroup();
}
bool Lua_Group::IsGroupMember(Lua_Mob mob) {
bool Lua_Group::IsGroupMember(const char* name) {
Lua_Safe_Call_Bool();
return self->IsGroupMember(mob);
return self->IsGroupMember(name);
}
bool Lua_Group::IsGroupMember(Lua_Mob c) {
Lua_Safe_Call_Bool();
return self->IsGroupMember(c);
}
void Lua_Group::CastGroupSpell(Lua_Mob caster, int spell_id) {
@ -59,9 +64,9 @@ void Lua_Group::SplitMoney(uint32 copper, uint32 silver, uint32 gold, uint32 pla
self->SplitMoney(copper, silver, gold, platinum, splitter);
}
void Lua_Group::SetLeader(Lua_Mob leader) {
void Lua_Group::SetLeader(Lua_Mob c) {
Lua_Safe_Call_Void();
self->SetLeader(leader);
self->SetLeader(c);
}
Lua_Mob Lua_Group::GetLeader() {
@ -74,9 +79,14 @@ const char *Lua_Group::GetLeaderName() {
return self->GetLeaderName();
}
bool Lua_Group::IsLeader(Lua_Mob leader) {
bool Lua_Group::IsLeader(const char* name) {
Lua_Safe_Call_Bool();
return self->IsLeader(leader);
return self->IsLeader(name);
}
bool Lua_Group::IsLeader(Lua_Mob c) {
Lua_Safe_Call_Bool();
return self->IsLeader(c);
}
int Lua_Group::GroupCount() {
@ -151,7 +161,9 @@ luabind::scope lua_register_group() {
.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,int,const char*))&Lua_Group::GroupMessage)
.def("IsGroupMember", (bool(Lua_Group::*)(const char*))&Lua_Group::IsGroupMember)
.def("IsGroupMember", (bool(Lua_Group::*)(Lua_Mob))&Lua_Group::IsGroupMember)
.def("IsLeader", (bool(Lua_Group::*)(const char*))&Lua_Group::IsLeader)
.def("IsLeader", (bool(Lua_Group::*)(Lua_Mob))&Lua_Group::IsLeader)
.def("SetLeader", (void(Lua_Group::*)(Lua_Mob))&Lua_Group::SetLeader)
.def("SplitExp", (void(Lua_Group::*)(uint32,Lua_Mob))&Lua_Group::SplitExp)

View File

@ -27,7 +27,8 @@ public:
}
void DisbandGroup();
bool IsGroupMember(Lua_Mob mob);
bool IsGroupMember(const char* name);
bool IsGroupMember(Lua_Mob c);
void CastGroupSpell(Lua_Mob caster, int spell_id);
void SplitExp(uint32 exp, Lua_Mob other);
void GroupMessage(Lua_Mob sender, const char* message);
@ -35,10 +36,11 @@ public:
uint32 GetTotalGroupDamage(Lua_Mob other);
void SplitMoney(uint32 copper, uint32 silver, uint32 gold, uint32 platinum);
void SplitMoney(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, Lua_Client splitter);
void SetLeader(Lua_Mob leader);
void SetLeader(Lua_Mob c);
Lua_Mob GetLeader();
const char *GetLeaderName();
bool IsLeader(Lua_Mob leader);
bool IsLeader(const char* name);
bool IsLeader(Lua_Mob c);
int GroupCount();
uint32 GetAverageLevel();
uint32 GetHighestLevel();

View File

@ -18,6 +18,11 @@ bool Lua_Raid::IsRaidMember(const char *name) {
return self->IsRaidMember(name);
}
bool Lua_Raid::IsRaidMember(Lua_Client c) {
Lua_Safe_Call_Bool();
return self->IsRaidMember(c);
}
void Lua_Raid::CastGroupSpell(Lua_Mob caster, int spell_id, uint32 group_id) {
Lua_Safe_Call_Void();
self->CastGroupSpell(caster, spell_id, group_id);
@ -83,6 +88,11 @@ bool Lua_Raid::IsGroupLeader(const char *name) {
return self->IsGroupLeader(name);
}
bool Lua_Raid::IsGroupLeader(Lua_Client c) {
Lua_Safe_Call_Bool();
return self->IsGroupLeader(c);
}
int Lua_Raid::GetHighestLevel() {
Lua_Safe_Call_Int();
return self->GetHighestLevel();
@ -168,8 +178,11 @@ luabind::scope lua_register_raid() {
.def("GetTotalRaidDamage", (uint32(Lua_Raid::*)(Lua_Mob))&Lua_Raid::GetTotalRaidDamage)
.def("GroupCount", (int(Lua_Raid::*)(uint32))&Lua_Raid::GroupCount)
.def("IsGroupLeader", (bool(Lua_Raid::*)(const char*))&Lua_Raid::IsGroupLeader)
.def("IsGroupLeader", (bool(Lua_Raid::*)(Lua_Client))&Lua_Raid::IsGroupLeader)
.def("IsLeader", (bool(Lua_Raid::*)(const char*))&Lua_Raid::IsLeader)
.def("IsLeader", (bool(Lua_Raid::*)(Lua_Client))&Lua_Raid::IsLeader)
.def("IsRaidMember", (bool(Lua_Raid::*)(const char*))&Lua_Raid::IsRaidMember)
.def("IsRaidMember", (bool(Lua_Raid::*)(Lua_Client))&Lua_Raid::IsRaidMember)
.def("RaidCount", (int(Lua_Raid::*)(void))&Lua_Raid::RaidCount)
.def("SplitExp", (void(Lua_Raid::*)(uint32,Lua_Mob))&Lua_Raid::SplitExp)
.def("SplitMoney", (void(Lua_Raid::*)(uint32,uint32,uint32,uint32,uint32))&Lua_Raid::SplitMoney)

View File

@ -27,6 +27,7 @@ public:
}
bool IsRaidMember(const char *name);
bool IsRaidMember(Lua_Client c);
void CastGroupSpell(Lua_Mob caster, int spell_id, uint32 group_id);
int GroupCount(uint32 group_id);
int RaidCount();
@ -40,6 +41,7 @@ public:
bool IsLeader(const char *c);
bool IsLeader(Lua_Client c);
bool IsGroupLeader(const char *name);
bool IsGroupLeader(Lua_Client c);
int GetHighestLevel();
int GetLowestLevel();
Lua_Client GetClientByIndex(int member_index);

View File

@ -12,9 +12,14 @@ void Perl_Group_DisbandGroup(Group* self) // @categories Script Utility, Group
self->DisbandGroup();
}
bool Perl_Group_IsGroupMember(Group* self, Mob* client) // @categories Account and Character, Script Utility, Group
bool Perl_Group_IsGroupMember(Group* self, Mob* c) // @categories Account and Character, Script Utility, Group
{
return self->IsGroupMember(client);
return self->IsGroupMember(c);
}
bool Perl_Group_IsGroupMember(Group* self, const char* name) // @categories Account and Character, Script Utility, Group
{
return self->IsGroupMember(name);
}
void Perl_Group_CastGroupSpell(Group* self, Mob* caster, uint16 spell_id) // @categories Account and Character, Script Utility, Group
@ -82,9 +87,14 @@ void Perl_Group_SendHPPacketsFrom(Group* self, Mob* new_member) // @categories S
self->SendHPPacketsFrom(new_member);
}
bool Perl_Group_IsLeader(Group* self, Mob* leadertest) // @categories Account and Character, Script Utility, Group
bool Perl_Group_IsLeader(Group* self, Mob* c) // @categories Account and Character, Script Utility, Group
{
return self->IsLeader(leadertest);
return self->IsLeader(c);
}
bool Perl_Group_IsLeader(Group* self, const char* name) // @categories Account and Character, Script Utility, Group
{
return self->IsLeader(name);
}
int Perl_Group_GroupCount(Group* self) // @categories Script Utility, Group
@ -157,8 +167,10 @@ void perl_register_group()
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);
package.add("IsGroupMember", &Perl_Group_IsGroupMember);
package.add("IsLeader", &Perl_Group_IsLeader);
package.add("IsGroupMember", (bool(*)(Group*, const char*))&Perl_Group_IsGroupMember);
package.add("IsGroupMember", (bool(*)(Group*, Mob*))&Perl_Group_IsGroupMember);
package.add("IsLeader", (bool(*)(Group*, const char*))&Perl_Group_IsLeader);
package.add("IsLeader", (bool(*)(Group*, Mob*))&Perl_Group_IsLeader);
package.add("SendHPPacketsFrom", &Perl_Group_SendHPPacketsFrom);
package.add("SendHPPacketsTo", &Perl_Group_SendHPPacketsTo);
package.add("SetLeader", &Perl_Group_SetLeader);

View File

@ -13,6 +13,11 @@ bool Perl_Raid_IsRaidMember(Raid* self, const char* name) // @categories Raid
return self->IsRaidMember(name);
}
bool Perl_Raid_IsRaidMember(Raid* self, Client* c) // @categories Raid
{
return self->IsRaidMember(c);
}
void Perl_Raid_CastGroupSpell(Raid* self, Mob* caster, uint16 spell_id, uint32 group_id) // @categories Group, Raid
{
self->CastGroupSpell(caster, spell_id, group_id);
@ -68,9 +73,9 @@ bool Perl_Raid_IsLeader(Raid* self, const char* name) // @categories Raid
return self->IsLeader(name);
}
bool Perl_Raid_IsLeader(Raid* self, Client* client) // @categories Raid
bool Perl_Raid_IsLeader(Raid* self, Client* c) // @categories Raid
{
return self->IsLeader(client);
return self->IsLeader(c);
}
bool Perl_Raid_IsGroupLeader(Raid* self, const char* who) // @categories Group, Raid
@ -78,6 +83,11 @@ bool Perl_Raid_IsGroupLeader(Raid* self, const char* who) // @categories Group,
return self->IsGroupLeader(who);
}
bool Perl_Raid_IsGroupLeader(Raid* self, Client* c) // @categories Group, Raid
{
return self->IsGroupLeader(c);
}
uint32_t Perl_Raid_GetHighestLevel(Raid* self) // @categories Raid
{
return self->GetHighestLevel();
@ -157,10 +167,12 @@ void perl_register_raid()
package.add("GetMember", &Perl_Raid_GetMember);
package.add("GetTotalRaidDamage", &Perl_Raid_GetTotalRaidDamage);
package.add("GroupCount", &Perl_Raid_GroupCount);
package.add("IsGroupLeader", &Perl_Raid_IsGroupLeader);
package.add("IsGroupLeader", (bool(*)(Raid*, const char*))&Perl_Raid_IsGroupLeader);
package.add("IsGroupLeader", (bool(*)(Raid*, Client*))&Perl_Raid_IsGroupLeader);
package.add("IsLeader", (bool(*)(Raid*, const char*))&Perl_Raid_IsLeader);
package.add("IsLeader", (bool(*)(Raid*, Client*))&Perl_Raid_IsLeader);
package.add("IsRaidMember", &Perl_Raid_IsRaidMember);
package.add("IsRaidMember", (bool(*)(Raid*, const char*))&Perl_Raid_IsRaidMember);
package.add("IsRaidMember", (bool(*)(Raid*, Client*))&Perl_Raid_IsRaidMember);
package.add("RaidCount", &Perl_Raid_RaidCount);
package.add("SplitExp", &Perl_Raid_SplitExp);
package.add("SplitMoney", (void(*)(Raid*, uint32, uint32, uint32, uint32, uint32))&Perl_Raid_SplitMoney);

View File

@ -354,12 +354,26 @@ void Raid::UpdateRaidAAs()
SaveRaidLeaderAA();
}
bool Raid::IsGroupLeader(const char *who)
bool Raid::IsGroupLeader(const char* name)
{
for(int x = 0; x < MAX_RAID_MEMBERS; x++)
if (name) {
for (const auto &m: members) {
if (!strcmp(m.membername, name)) {
return m.IsGroupLeader;
}
}
}
return false;
}
bool Raid::IsGroupLeader(Client *c)
{
if(strcmp(who, members[x].membername) == 0){
return members[x].IsGroupLeader;
if (c) {
for (const auto &m: members) {
if (m.member == c) {
return true;
}
}
}
@ -890,12 +904,29 @@ void Raid::RemoveRaidLooter(const char* looter)
safe_delete(pack);
}
bool Raid::IsRaidMember(const char *name){
for(int x = 0; x < MAX_RAID_MEMBERS; x++)
bool Raid::IsRaidMember(const char *name)
{
if(strcmp(name, members[x].membername) == 0)
if (name) {
for (const auto &m: members) {
if (!strcmp(m.membername, name)) {
return true;
}
}
}
return false;
}
bool Raid::IsRaidMember(Client* c)
{
if (c) {
for (const auto &m: members) {
if (m.member == c) {
return true;
}
}
}
return false;
}

View File

@ -102,10 +102,10 @@ public:
Raid(uint32 raidID);
~Raid();
void SetLeader(Client *newLeader) { leader = newLeader; }
void SetLeader(Client* c) { leader = c; }
Client* GetLeader() { return leader; }
bool IsLeader(Client *c) { return leader==c; }
bool IsLeader(const char* name) { return (strcmp(leadername, name)==0); }
bool IsLeader(Client* c) { return c == leader; }
bool IsLeader(const char* name) { return !strcmp(leadername, name); }
void SetRaidLeader(const char *wasLead, const char *name);
bool Process();
@ -118,8 +118,10 @@ public:
void SetGroupLeader(const char *who, bool glFlag = true);
Client *GetGroupLeader(uint32 group_id);
void RemoveGroupLeader(const char *who);
bool IsGroupLeader(const char *who);
bool IsGroupLeader(const char* name);
bool IsGroupLeader(Client *c);
bool IsRaidMember(const char* name);
bool IsRaidMember(Client *c);
void UpdateLevel(const char *name, int newLevel);
uint32 GetFreeGroup();