diff --git a/common/database.cpp b/common/database.cpp index 9c846b260..3f64a21f9 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -2180,6 +2180,22 @@ uint32 Database::GetGroupIDByCharID(uint32 character_id) return atoi(row[0]); } +uint32 Database::GetRaidIDByCharID(uint32 character_id) { + std::string query = fmt::format( + SQL( + SELECT raidid + FROM raid_members + WHERE charid = '{}' + ), + character_id + ); + auto results = QueryDatabase(query); + for (auto row = results.begin(); row != results.end(); ++row) { + return atoi(row[0]); + } + return 0; +} + /** * @param log_settings */ diff --git a/common/database.h b/common/database.h index 4b9391d31..95458c1c1 100644 --- a/common/database.h +++ b/common/database.h @@ -134,6 +134,7 @@ public: uint32 GetCharacterInfo(const char* iName, uint32* oAccID = 0, uint32* oZoneID = 0, uint32* oInstanceID = 0, float* oX = 0, float* oY = 0, float* oZ = 0); uint32 GetGuildIDByCharID(uint32 char_id); uint32 GetGroupIDByCharID(uint32 char_id); + uint32 GetRaidIDByCharID(uint32 char_id); void GetAccountName(uint32 accountid, char* name, uint32* oLSAccountID = 0); void GetCharName(uint32 char_id, char* name); diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 8a68b0fe3..efdc09803 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3204,6 +3204,23 @@ XS(XS__getgroupidbycharid) { XSRETURN(1); } +XS(XS__getraididbycharid); +XS(XS__getraididbycharid) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: quest::getraididbycharid(uint32 char_id)"); + dXSTARG; + + int RETVAL; + uint32 char_id = (int) SvUV(ST(0)); + + RETVAL = quest_manager.getraididbycharid(char_id); + XSprePUSH; + PUSHi((IV)RETVAL); + + XSRETURN(1); +} + XS(XS__SetRunning); XS(XS__SetRunning) { dXSARGS; @@ -3979,6 +3996,7 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "getguildnamebyid"), XS__getguildnamebyid, file); newXS(strcpy(buf, "getguildidbycharid"), XS__getguildidbycharid, file); newXS(strcpy(buf, "getgroupidbycharid"), XS__getgroupidbycharid, file); + newXS(strcpy(buf, "getraididbycharid"), XS__getraididbycharid, file); newXS(strcpy(buf, "getlevel"), XS__getlevel, file); newXS(strcpy(buf, "getplayerburiedcorpsecount"), XS__getplayerburiedcorpsecount, file); newXS(strcpy(buf, "getplayercorpsecount"), XS__getplayercorpsecount, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index cc60664b5..69e262199 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -866,6 +866,10 @@ int lua_get_group_id_by_char_id(uint32 char_id) { return database.GetGroupIDByCharID(char_id); } +int lua_get_raid_id_by_char_id(uint32 char_id) { + return database.GetRaidIDByCharID(char_id); +} + uint32 lua_create_instance(const char *zone, uint32 version, uint32 duration) { return quest_manager.CreateInstance(zone, version, duration); } @@ -1738,6 +1742,7 @@ luabind::scope lua_register_general() { luabind::def("get_guild_name_by_id", &lua_get_guild_name_by_id), luabind::def("get_guild_id_by_char_id", &lua_get_guild_id_by_char_id), luabind::def("get_group_id_by_char_id", &lua_get_group_id_by_char_id), + luabind::def("get_raid_id_by_char_id", &lua_get_raid_id_by_char_id), luabind::def("create_instance", &lua_create_instance), luabind::def("destroy_instance", &lua_destroy_instance), luabind::def("update_instance_timer", &lua_update_instance_timer), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 4b2eb432f..033b42f1a 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -2890,6 +2890,13 @@ int QuestManager::getgroupidbycharid(uint32 char_id) { return 0; } +int QuestManager::getraididbycharid(uint32 char_id) { + if (char_id > 0) { + return database.GetRaidIDByCharID(char_id); + } + return 0; +} + void QuestManager::SetRunning(bool val) { QuestManagerCurrentQuestVars(); diff --git a/zone/questmgr.h b/zone/questmgr.h index 53b425bd0..2aa1df109 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -253,6 +253,7 @@ public: const char* getguildnamebyid(int guild_id); int getguildidbycharid(uint32 char_id); int getgroupidbycharid(uint32 char_id); + int getraididbycharid(uint32 char_id); void SetRunning(bool val); bool IsRunning(); void FlyMode(GravityBehavior flymode);