diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index eac2cdc48..2dc5b70a0 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3231,6 +3231,7 @@ XS(XS__saylink) { XSRETURN(1); } + XS(XS__getcharnamebyid); XS(XS__getcharnamebyid) { dXSARGS; @@ -3246,6 +3247,22 @@ XS(XS__getcharnamebyid) { sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; +} + +XS(XS__getcharidbyname); +XS(XS__getcharidbyname) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: quest::getcharidbyname(string name)"); + dXSTARG; + + uint32 RETVAL; + const char *name = (const char *) SvPV_nolen(ST(0)); + + RETVAL = quest_manager.getcharidbyname(name); + XSprePUSH; + PUSHu((UV)RETVAL); + XSRETURN(1); } @@ -4090,6 +4107,7 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "follow"), XS__follow, file); newXS(strcpy(buf, "forcedoorclose"), XS__forcedoorclose, file); newXS(strcpy(buf, "forcedooropen"), XS__forcedooropen, file); + newXS(strcpy(buf, "getcharidbyname"), XS__getcharidbyname, file); newXS(strcpy(buf, "getinventoryslotid"), XS__getinventoryslotid, file); newXS(strcpy(buf, "getitemname"), XS__getitemname, file); newXS(strcpy(buf, "getItemName"), XS_qc_getItemName, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 72749998d..848348fbf 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -874,6 +874,10 @@ const char *lua_get_char_name_by_id(uint32 char_id) { return database.GetCharNameByID(char_id); } +uint32 lua_get_char_id_by_name(const char* name) { + return quest_manager.getcharidbyname(name); +} + const char *lua_get_guild_name_by_id(uint32 guild_id) { return quest_manager.getguildnamebyid(guild_id); } @@ -1768,6 +1772,7 @@ luabind::scope lua_register_general() { 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_char_id_by_name", (uint32(*)(const char*))&lua_get_char_id_by_name), 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 5fa96b937..0a61361c6 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -2935,6 +2935,10 @@ const char* QuestManager::getcharnamebyid(uint32 char_id) { return ""; } +uint32 QuestManager::getcharidbyname(const char* name) { + return database.GetCharacterID(name); +} + 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 519d1b798..a3c7eab3d 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -256,6 +256,7 @@ public: 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); + uint32 getcharidbyname(const char* name); const char* getguildnamebyid(int guild_id); int getguildidbycharid(uint32 char_id); int getgroupidbycharid(uint32 char_id);