From ae959be5ace8035232acb5919b3ee8da3b1e1c1c Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 5 Apr 2020 21:11:21 -0400 Subject: [PATCH] Added getcharnamebyid(char_id) to Perl/Lua. --- common/database.cpp | 16 ++++++++++++++++ common/database.h | 1 + zone/embparser_api.cpp | 19 +++++++++++++++++++ zone/lua_general.cpp | 5 +++++ zone/questmgr.cpp | 7 +++++++ zone/questmgr.h | 1 + 6 files changed, 49 insertions(+) diff --git a/common/database.cpp b/common/database.cpp index 3f64a21f9..ab9b1ce84 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -925,6 +925,22 @@ void Database::GetCharName(uint32 char_id, char* name) { } } +const char* Database::GetCharNameByID(uint32 char_id) { + std::string query = fmt::format("SELECT `name` FROM `character_data` WHERE id = {}", char_id); + auto results = QueryDatabase(query); + + if (!results.Success()) { + return ""; + } + + if (results.RowCount() == 0) { + return ""; + } + + auto row = results.begin(); + return row[0]; +} + bool Database::LoadVariables() { auto results = QueryDatabase(StringFormat("SELECT varname, value, unix_timestamp() FROM variables where unix_timestamp(ts) >= %d", varcache.last_update)); diff --git a/common/database.h b/common/database.h index 95458c1c1..44c264dfd 100644 --- a/common/database.h +++ b/common/database.h @@ -138,6 +138,7 @@ public: void GetAccountName(uint32 accountid, char* name, uint32* oLSAccountID = 0); void GetCharName(uint32 char_id, char* name); + const char *GetCharNameByID(uint32 char_id); void LoginIP(uint32 AccountID, const char* LoginIP); /* Instancing */ diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 3ca3184d5..eac2cdc48 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3231,6 +3231,24 @@ XS(XS__saylink) { XSRETURN(1); } +XS(XS__getcharnamebyid); +XS(XS__getcharnamebyid) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: quest::getcharnamebyid(uint32 char_id)"); + dXSTARG; + + Const_char *RETVAL; + uint32 char_id = (int) SvUV(ST(0)); + + RETVAL = quest_manager.getcharnamebyid(char_id); + + sv_setpv(TARG, RETVAL); + XSprePUSH; + PUSHTARG; + XSRETURN(1); +} + XS(XS__getguildnamebyid); XS(XS__getguildnamebyid) { dXSARGS; @@ -4076,6 +4094,7 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "getitemname"), XS__getitemname, file); newXS(strcpy(buf, "getItemName"), XS_qc_getItemName, file); newXS(strcpy(buf, "get_spawn_condition"), XS__get_spawn_condition, file); + newXS(strcpy(buf, "getcharnamebyid"), XS__getcharnamebyid, file); newXS(strcpy(buf, "getguildnamebyid"), XS__getguildnamebyid, file); newXS(strcpy(buf, "getguildidbycharid"), XS__getguildidbycharid, file); newXS(strcpy(buf, "getgroupidbycharid"), XS__getgroupidbycharid, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index ddae2dd26..72749998d 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -870,6 +870,10 @@ bool lua_delete_data(std::string bucket_key) { return DataBucket::DeleteData(bucket_key); } +const char *lua_get_char_name_by_id(uint32 char_id) { + return database.GetCharNameByID(char_id); +} + const char *lua_get_guild_name_by_id(uint32 guild_id) { return quest_manager.getguildnamebyid(guild_id); } @@ -1763,6 +1767,7 @@ luabind::scope lua_register_general() { luabind::def("set_data", (void(*)(std::string, std::string))&lua_set_data), luabind::def("set_data", (void(*)(std::string, std::string, std::string))&lua_set_data), luabind::def("delete_data", (bool(*)(std::string))&lua_delete_data), + luabind::def("get_char_name_by_id", &lua_get_char_name_by_id), 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), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 62cd73610..5fa96b937 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -2928,6 +2928,13 @@ std::string QuestManager::saylink(char *saylink_text, bool silent, const char *l return EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink_text, silent, link_name); } +const char* QuestManager::getcharnamebyid(uint32 char_id) { + if (char_id > 0) { + return database.GetCharNameByID(char_id); + } + return ""; +} + const char* QuestManager::getguildnamebyid(int guild_id) { if (guild_id > 0) return guild_mgr.GetGuildName(guild_id); diff --git a/zone/questmgr.h b/zone/questmgr.h index c47c775e7..519d1b798 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -255,6 +255,7 @@ public: void FlagInstanceByRaidLeader(uint32 zone, int16 version); const char* varlink(char* perltext, int item_id); std::string saylink(char *saylink_text, bool silent, const char *link_name); + const char* getcharnamebyid(uint32 char_id); const char* getguildnamebyid(int guild_id); int getguildidbycharid(uint32 char_id); int getgroupidbycharid(uint32 char_id);