diff --git a/zone/bot_command.cpp b/zone/bot_command.cpp index b85d4f1e4..1b3c66348 100644 --- a/zone/bot_command.cpp +++ b/zone/bot_command.cpp @@ -7720,7 +7720,7 @@ void bot_subcommand_botgroup_list(Client *c, const Seperator *sep) return; } - std::list> botgroups_list; + std::list> botgroups_list; if (!database.botdb.LoadBotGroupsListByOwnerID(c->CharacterID(), botgroups_list)) { c->Message(Chat::White, "Failed to load bot-group."); return; @@ -7733,17 +7733,17 @@ void bot_subcommand_botgroup_list(Client *c, const Seperator *sep) uint32 botgroup_count = 0; - for (auto botgroups_iter : botgroups_list) { + for (const auto& [group_name, group_leader_id] : botgroups_list) { c->Message( Chat::White, fmt::format( "Bot-group {} | Name: {} | Leader: {}{} | {}", (botgroup_count + 1), - botgroups_iter.first, - botgroups_iter.second, - database.botdb.IsBotGroupAutoSpawn(botgroups_iter.first) ? " (Auto Spawn)" : "", + group_name, + database.botdb.GetBotNameByID(group_leader_id), + database.botdb.IsBotGroupAutoSpawn(group_name) ? " (Auto Spawn)" : "", Saylink::Silent( - fmt::format("^botgroupload {}", botgroups_iter.first), + fmt::format("^botgroupload {}", group_name), "Load" ) ).c_str() diff --git a/zone/bot_database.cpp b/zone/bot_database.cpp index 600daab42..fe3d39e62 100644 --- a/zone/bot_database.cpp +++ b/zone/bot_database.cpp @@ -2536,18 +2536,18 @@ bool BotDatabase::RemoveMemberFromBotGroup(const uint32 member_id) return true; } -bool BotDatabase::LoadBotGroupIDForLoadBotGroup(const uint32 owner_id, const std::string& group_name, uint32& botgroup_id) +bool BotDatabase::LoadBotGroupIDForLoadBotGroup(const uint32 owner_id, std::string_view group_name, uint32& botgroup_id) { if (!owner_id || group_name.empty()) { return false; } query = fmt::format( - "SELECT groups_index, group_name FROM " + "SELECT bg.groups_index, group_name FROM " "bot_groups bg INNER JOIN bot_group_members bgm " "ON bg.groups_index = bgm.groups_index " "WHERE bgm.bot_id IN " - "(SELECT bot_id FROM bot_data WHERE WHERE owner_id = {})", + "(SELECT bot_id FROM bot_data WHERE owner_id = {})", owner_id ); @@ -2606,7 +2606,7 @@ bool BotDatabase::LoadBotGroup(const std::string& group_name, std::map>& botgroups_list) +bool BotDatabase::LoadBotGroupsListByOwnerID(const uint32 owner_id, std::list>& botgroups_list) { if (!owner_id) { return false; @@ -2614,11 +2614,11 @@ bool BotDatabase::LoadBotGroupsListByOwnerID(const uint32 owner_id, std::list(row[0], row[1])); + botgroups_list.push_back(std::pair(row[0], atoul(row[1]))); } return true; @@ -3113,6 +3113,30 @@ bool BotDatabase::SaveBotArcherSetting(const uint32 bot_id, const bool bot_arche return true; } +std::string BotDatabase::GetBotNameByID(const uint32 bot_id) +{ + + if (!bot_id) { + return nullptr; + } + query = fmt::format( + "SELECT `name` FROM `bot_data` WHERE `bot_id` = {}", + bot_id + ); + auto results = database.QueryDatabase(query); + + if (!results.Success()) { + return nullptr; + } + + if (results.RowCount() == 1) { + auto row = results.begin(); + return row[0]; + } + + return nullptr; +} + /* fail::Bot functions */ const char* BotDatabase::fail::LoadBotsList() { return "Failed to bots list"; } const char* BotDatabase::fail::LoadOwnerID() { return "Failed to load owner ID"; } @@ -3178,3 +3202,4 @@ const char* BotDatabase::fail::DeleteHealRotation() { return "Failed to delete h const char* BotDatabase::fail::DeleteAllHealRotations() { return "Failed to delete all heal rotations"; } /* fail::Bot miscellaneous functions */ +const char* BotDatabase::fail::GetBotNameByID() { return "Failed to get bot name by bot ID"; } diff --git a/zone/bot_database.h b/zone/bot_database.h index dcc3af0ad..e86a31778 100644 --- a/zone/bot_database.h +++ b/zone/bot_database.h @@ -164,10 +164,10 @@ public: bool AddMemberToBotGroup(const uint32 leader_id, const uint32 member_id); bool RemoveMemberFromBotGroup(const uint32 member_id); - bool LoadBotGroupIDForLoadBotGroup(const uint32 owner_id, const std::string& botgroup_name, uint32& botgroup_id); + bool LoadBotGroupIDForLoadBotGroup(const uint32 owner_id, std::string_view botgroup_name, uint32& botgroup_id); bool LoadBotGroup(const std::string& botgroup_name, std::map>& member_list); - bool LoadBotGroupsListByOwnerID(const uint32 owner_id, std::list>& botgroups_list); + bool LoadBotGroupsListByOwnerID(const uint32 owner_id, std::list>& botgroups_list); /* Bot group functions */ @@ -190,6 +190,7 @@ public: /* Bot miscellaneous functions */ uint8 GetSpellCastingChance(uint8 spell_type_index, uint8 class_index, uint8 stance_index, uint8 conditional_index); + std::string GetBotNameByID(const uint32 bot_id); uint16 GetRaceClassBitmask(uint16 bot_race); @@ -280,6 +281,7 @@ public: static const char* DeleteAllHealRotations(); /* fail::Bot miscellaneous functions */ + static const char* GetBotNameByID(); }; private: