[Quest API] Add Group/Raid overloads to Perl/Lua. (#2526)

# Perl
- Add `$raid->GetGroup(client)` to Perl.
- Add `$raid->GetGroupMember(member_index)` to Perl.
- Add `$raid->IsLeader(client)` to Perl.

# Lua
- Add `group:GroupMessage(sender, message)` to Lua.
This commit is contained in:
Kinglykrab 2022-11-14 14:04:38 -05:00 committed by GitHub
parent 3cb13969ff
commit c5c57b7541
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 72 additions and 32 deletions

View File

@ -1,5 +1,7 @@
#ifdef LUA_EQEMU #ifdef LUA_EQEMU
#include "../common/data_verification.h"
#include "lua.hpp" #include "lua.hpp"
#include <luabind/luabind.hpp> #include <luabind/luabind.hpp>
#include <luabind/object.hpp> #include <luabind/object.hpp>
@ -32,7 +34,12 @@ void Lua_Group::SplitExp(uint32 exp, Lua_Mob other) {
self->SplitExp(exp, other); self->SplitExp(exp, other);
} }
void Lua_Group::GroupMessage(Lua_Mob sender, int language, const char *message) { void Lua_Group::GroupMessage(Lua_Mob sender, const char* message) {
Lua_Safe_Call_Void();
self->GroupMessage(sender, 0, 100, message);
}
void Lua_Group::GroupMessage(Lua_Mob sender, int language, const char* message) {
Lua_Safe_Call_Void(); Lua_Safe_Call_Void();
self->GroupMessage(sender, language, 100, message); self->GroupMessage(sender, language, 100, message);
} }
@ -97,14 +104,14 @@ int Lua_Group::GetID() {
return self->GetID(); return self->GetID();
} }
Lua_Mob Lua_Group::GetMember(int index) { Lua_Mob Lua_Group::GetMember(int member_index) {
Lua_Safe_Call_Class(Lua_Mob); Lua_Safe_Call_Class(Lua_Mob);
if(index >= 6 || index < 0) { if (!EQ::ValueWithin(member_index, 0, 5)) {
return Lua_Mob(); return Lua_Mob();
} }
return self->members[index]; return self->members[member_index];
} }
bool Lua_Group::DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name) bool Lua_Group::DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name)
@ -142,7 +149,8 @@ luabind::scope lua_register_group() {
.def("GetMember", (Lua_Mob(Lua_Group::*)(int))&Lua_Group::GetMember) .def("GetMember", (Lua_Mob(Lua_Group::*)(int))&Lua_Group::GetMember)
.def("GetTotalGroupDamage", (uint32(Lua_Group::*)(Lua_Mob))&Lua_Group::GetTotalGroupDamage) .def("GetTotalGroupDamage", (uint32(Lua_Group::*)(Lua_Mob))&Lua_Group::GetTotalGroupDamage)
.def("GroupCount", (int(Lua_Group::*)(void))&Lua_Group::GroupCount) .def("GroupCount", (int(Lua_Group::*)(void))&Lua_Group::GroupCount)
.def("GroupMessage", (void(Lua_Group::*)(Lua_Mob,int,const char* message))&Lua_Group::GroupMessage) .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::*)(Lua_Mob))&Lua_Group::IsGroupMember) .def("IsGroupMember", (bool(Lua_Group::*)(Lua_Mob))&Lua_Group::IsGroupMember)
.def("IsLeader", (bool(Lua_Group::*)(Lua_Mob))&Lua_Group::IsLeader) .def("IsLeader", (bool(Lua_Group::*)(Lua_Mob))&Lua_Group::IsLeader)
.def("SetLeader", (void(Lua_Group::*)(Lua_Mob))&Lua_Group::SetLeader) .def("SetLeader", (void(Lua_Group::*)(Lua_Mob))&Lua_Group::SetLeader)

View File

@ -30,7 +30,8 @@ public:
bool IsGroupMember(Lua_Mob mob); bool IsGroupMember(Lua_Mob mob);
void CastGroupSpell(Lua_Mob caster, int spell_id); void CastGroupSpell(Lua_Mob caster, int spell_id);
void SplitExp(uint32 exp, Lua_Mob other); void SplitExp(uint32 exp, Lua_Mob other);
void GroupMessage(Lua_Mob sender, int language, const char *message); void GroupMessage(Lua_Mob sender, const char* message);
void GroupMessage(Lua_Mob sender, int language, const char* message);
uint32 GetTotalGroupDamage(Lua_Mob other); 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);
void SplitMoney(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, Lua_Client splitter); void SplitMoney(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, Lua_Client splitter);
@ -44,7 +45,7 @@ public:
uint32 GetLowestLevel(); uint32 GetLowestLevel();
void TeleportGroup(Lua_Mob sender, uint32 zone_id, uint32 instance_id, float x, float y, float z, float h); void TeleportGroup(Lua_Mob sender, uint32 zone_id, uint32 instance_id, float x, float y, float z, float h);
int GetID(); int GetID();
Lua_Mob GetMember(int index); 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);
bool DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name, int max_check_count); bool DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name, int max_check_count);
}; };

View File

@ -1,5 +1,7 @@
#ifdef LUA_EQEMU #ifdef LUA_EQEMU
#include "../common/data_verification.h"
#include "lua.hpp" #include "lua.hpp"
#include <luabind/luabind.hpp> #include <luabind/luabind.hpp>
#include <luabind/object.hpp> #include <luabind/object.hpp>
@ -91,9 +93,9 @@ int Lua_Raid::GetLowestLevel() {
return self->GetLowestLevel(); return self->GetLowestLevel();
} }
Lua_Client Lua_Raid::GetClientByIndex(int index) { Lua_Client Lua_Raid::GetClientByIndex(int member_index) {
Lua_Safe_Call_Class(Lua_Client); Lua_Safe_Call_Class(Lua_Client);
return self->GetClientByIndex(index); return self->GetClientByIndex(member_index);
} }
void Lua_Raid::TeleportGroup(Lua_Mob sender, uint32 zone_id, uint32 instance_id, float x, float y, float z, float h, uint32 group_id) { void Lua_Raid::TeleportGroup(Lua_Mob sender, uint32 zone_id, uint32 instance_id, float x, float y, float z, float h, uint32 group_id) {
@ -111,24 +113,27 @@ int Lua_Raid::GetID() {
return self->GetID(); return self->GetID();
} }
Lua_Client Lua_Raid::GetMember(int index) { Lua_Client Lua_Raid::GetMember(int member_index) {
Lua_Safe_Call_Class(Lua_Client); Lua_Safe_Call_Class(Lua_Client);
if(index >= 72 || index < 0) { if (!EQ::ValueWithin(member_index, 0, 71)) {
return Lua_Client(); return Lua_Client();
} }
return self->members[index].member; return self->members[member_index].member;
} }
int Lua_Raid::GetGroupNumber(int index) { int Lua_Raid::GetGroupNumber(int member_index) {
Lua_Safe_Call_Int(); Lua_Safe_Call_Int();
if(index >= 72 || index < 0 || self->members[index].GroupNumber == RAID_GROUPLESS) { if (
!EQ::ValueWithin(member_index, 0, 71) ||
self->members[member_index].GroupNumber == RAID_GROUPLESS
) {
return -1; return -1;
} }
return self->members[index].GroupNumber; return self->members[member_index].GroupNumber;
} }
bool Lua_Raid::DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name) bool Lua_Raid::DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name)

View File

@ -42,12 +42,12 @@ public:
bool IsGroupLeader(const char *name); bool IsGroupLeader(const char *name);
int GetHighestLevel(); int GetHighestLevel();
int GetLowestLevel(); int GetLowestLevel();
Lua_Client GetClientByIndex(int index); Lua_Client GetClientByIndex(int member_index);
void TeleportGroup(Lua_Mob sender, uint32 zone_id, uint32 instance_id, float x, float y, float z, float h, uint32 group_id); void TeleportGroup(Lua_Mob sender, uint32 zone_id, uint32 instance_id, float x, float y, float z, float h, uint32 group_id);
void TeleportRaid(Lua_Mob sender, uint32 zone_id, uint32 instance_id, float x, float y, float z, float h); void TeleportRaid(Lua_Mob sender, uint32 zone_id, uint32 instance_id, float x, float y, float z, float h);
int GetID(); int GetID();
Lua_Client GetMember(int index); Lua_Client GetMember(int member_index);
int GetGroupNumber(int index); int GetGroupNumber(int member_index);
bool DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_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); bool DoesAnyMemberHaveExpeditionLockout(std::string expedition_name, std::string event_name, int max_check_count);
}; };

View File

@ -2,6 +2,7 @@
#ifdef EMBPERL_XS_CLASSES #ifdef EMBPERL_XS_CLASSES
#include "../common/data_verification.h"
#include "../common/global_define.h" #include "../common/global_define.h"
#include "embperl.h" #include "embperl.h"
#include "groups.h" #include "groups.h"
@ -34,10 +35,10 @@ void Perl_Group_GroupMessage(Group* self, Mob* sender, const char* message) // @
void Perl_Group_GroupMessage(Group* self, Mob* sender, uint8_t language, const char* message) // @categories Script Utility, Group void Perl_Group_GroupMessage(Group* self, Mob* sender, uint8_t language, const char* message) // @categories Script Utility, Group
{ {
if ((language >= MAX_PP_LANGUAGE) || (language < 0)) if (!EQ::ValueWithin(language, 0, (MAX_PP_LANGUAGE - 1))) {
{
language = 0; language = 0;
} }
self->GroupMessage(sender, language, 100, message); self->GroupMessage(sender, language, 100, message);
} }
@ -101,13 +102,13 @@ uint32_t Perl_Group_GetID(Group* self) // @categories Script Utility, Group
return self->GetID(); return self->GetID();
} }
Client* Perl_Group_GetMember(Group* self, int group_index) // @categories Account and Character, Script Utility, Group Client* Perl_Group_GetMember(Group* self, int member_index) // @categories Account and Character, Script Utility, Group
{ {
Mob* member = nullptr; Mob* member = nullptr;
if (group_index >= 0 && group_index < 6) if (EQ::ValueWithin(member_index, 0, 5)) {
{ member = self->members[member_index];
member = self->members[group_index];
} }
return member ? member->CastToClient() : nullptr; return member ? member->CastToClient() : nullptr;
} }

View File

@ -2,6 +2,7 @@
#ifdef EMBPERL_XS_CLASSES #ifdef EMBPERL_XS_CLASSES
#include "../common/data_verification.h"
#include "../common/global_define.h" #include "../common/global_define.h"
#include "embperl.h" #include "embperl.h"
#include "raids.h" #include "raids.h"
@ -32,6 +33,11 @@ uint32_t Perl_Raid_GetGroup(Raid* self, const char* name) // @categories Group,
return self->GetGroup(name); return self->GetGroup(name);
} }
uint32_t Perl_Raid_GetGroup(Raid* self, Client* client) // @categories Group, Raid
{
return self->GetGroup(client);
}
void Perl_Raid_SplitExp(Raid* self, uint32 experience, Mob* other) // @categories Experience and Level, Raid void Perl_Raid_SplitExp(Raid* self, uint32 experience, Mob* other) // @categories Experience and Level, Raid
{ {
self->SplitExp(experience, other); self->SplitExp(experience, other);
@ -57,6 +63,11 @@ bool Perl_Raid_IsLeader(Raid* self, const char* name) // @categories Raid
return self->IsLeader(name); return self->IsLeader(name);
} }
bool Perl_Raid_IsLeader(Raid* self, Client* client) // @categories Raid
{
return self->IsLeader(client);
}
bool Perl_Raid_IsGroupLeader(Raid* self, const char* who) // @categories Group, Raid bool Perl_Raid_IsGroupLeader(Raid* self, const char* who) // @categories Group, Raid
{ {
return self->IsGroupLeader(who); return self->IsGroupLeader(who);
@ -72,9 +83,9 @@ uint32_t Perl_Raid_GetLowestLevel(Raid* self) // @categories Raid
return self->GetLowestLevel(); return self->GetLowestLevel();
} }
Client* Perl_Raid_GetClientByIndex(Raid* self, uint16_t raid_index) // @categories Raid Client* Perl_Raid_GetClientByIndex(Raid* self, uint16_t member_index) // @categories Raid
{ {
return self->GetClientByIndex(raid_index); return self->GetClientByIndex(member_index);
} }
void Perl_Raid_TeleportGroup(Raid* self, Mob* sender, uint32 zone_id, float x, float y, float z, float heading, uint32 group_id) // @categories Group, Raid void Perl_Raid_TeleportGroup(Raid* self, Mob* sender, uint32 zone_id, float x, float y, float z, float heading, uint32 group_id) // @categories Group, Raid
@ -92,13 +103,13 @@ uint32_t Perl_Raid_GetID(Raid* self) // @categories Raid
return self->GetID(); return self->GetID();
} }
Client* Perl_Raid_GetMember(Raid* self, int index) // @categories Raid Client* Perl_Raid_GetMember(Raid* self, int member_index) // @categories Raid
{ {
if (index < 0 || index >= MAX_RAID_MEMBERS) if (!EQ::ValueWithin(member_index, 0, (MAX_RAID_MEMBERS - 1))) {
{
return nullptr; return nullptr;
} }
return self->members[index].member;
return self->members[member_index].member;
} }
bool Perl_Raid_DoesAnyMemberHaveExpeditionLockout(Raid* self, std::string expedition_name, std::string event_name) bool Perl_Raid_DoesAnyMemberHaveExpeditionLockout(Raid* self, std::string expedition_name, std::string event_name)
@ -111,6 +122,17 @@ bool Perl_Raid_DoesAnyMemberHaveExpeditionLockout(Raid* self, std::string expedi
return self->DoesAnyMemberHaveExpeditionLockout(expedition_name, event_name, max_check_count); return self->DoesAnyMemberHaveExpeditionLockout(expedition_name, event_name, max_check_count);
} }
int Perl_Raid_GetGroupNumber(Raid* self, int member_index) {
if (
!EQ::ValueWithin(member_index, 0, 71) ||
self->members[member_index].GroupNumber == RAID_GROUPLESS
) {
return -1;
}
return self->members[member_index].GroupNumber;
}
void perl_register_raid() void perl_register_raid()
{ {
perl::interpreter perl(PERL_GET_THX); perl::interpreter perl(PERL_GET_THX);
@ -121,7 +143,9 @@ void perl_register_raid()
package.add("DoesAnyMemberHaveExpeditionLockout", (bool(*)(Raid*, std::string, std::string))&Perl_Raid_DoesAnyMemberHaveExpeditionLockout); package.add("DoesAnyMemberHaveExpeditionLockout", (bool(*)(Raid*, std::string, std::string))&Perl_Raid_DoesAnyMemberHaveExpeditionLockout);
package.add("DoesAnyMemberHaveExpeditionLockout", (bool(*)(Raid*, std::string, std::string, int))&Perl_Raid_DoesAnyMemberHaveExpeditionLockout); package.add("DoesAnyMemberHaveExpeditionLockout", (bool(*)(Raid*, std::string, std::string, int))&Perl_Raid_DoesAnyMemberHaveExpeditionLockout);
package.add("GetClientByIndex", &Perl_Raid_GetClientByIndex); package.add("GetClientByIndex", &Perl_Raid_GetClientByIndex);
package.add("GetGroup", &Perl_Raid_GetGroup); package.add("GetGroup", (uint32(*)(Raid*, const char*))&Perl_Raid_GetGroup);
package.add("GetGroup", (uint32(*)(Raid*, Client*))&Perl_Raid_GetGroup);
package.add("GetGroupNumber", &Perl_Raid_GetGroupNumber);
package.add("GetHighestLevel", &Perl_Raid_GetHighestLevel); package.add("GetHighestLevel", &Perl_Raid_GetHighestLevel);
package.add("GetID", &Perl_Raid_GetID); package.add("GetID", &Perl_Raid_GetID);
package.add("GetLowestLevel", &Perl_Raid_GetLowestLevel); package.add("GetLowestLevel", &Perl_Raid_GetLowestLevel);
@ -129,7 +153,8 @@ void perl_register_raid()
package.add("GetTotalRaidDamage", &Perl_Raid_GetTotalRaidDamage); package.add("GetTotalRaidDamage", &Perl_Raid_GetTotalRaidDamage);
package.add("GroupCount", &Perl_Raid_GroupCount); package.add("GroupCount", &Perl_Raid_GroupCount);
package.add("IsGroupLeader", &Perl_Raid_IsGroupLeader); package.add("IsGroupLeader", &Perl_Raid_IsGroupLeader);
package.add("IsLeader", &Perl_Raid_IsLeader); 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", &Perl_Raid_IsRaidMember);
package.add("RaidCount", &Perl_Raid_RaidCount); package.add("RaidCount", &Perl_Raid_RaidCount);
package.add("SplitExp", &Perl_Raid_SplitExp); package.add("SplitExp", &Perl_Raid_SplitExp);