diff --git a/src/mod_starterguild.cpp b/src/mod_starterguild.cpp index 5041b5d..766f6ee 100644 --- a/src/mod_starterguild.cpp +++ b/src/mod_starterguild.cpp @@ -1,4 +1,6 @@ #include "mod_starterguild.h" +#include "GuildMgr.h" +#include "Log.h" #include void StarterGuild::OnPlayerLogin(Player* player) @@ -8,56 +10,66 @@ void StarterGuild::OnPlayerLogin(Player* player) ChatHandler(player->GetSession()).SendSysMessage("This server is running the |cff4CFF00StarterGuild |rmodule."); } -void StarterGuild::OnPlayerLevelChanged(Player * player, uint8 previousLevel) +void StarterGuild::OnPlayerLevelChanged(Player* player, uint8 previousLevel) { if (sConfigMgr->GetOption("StarterGuild.Enable", true)) { auto level = sConfigMgr->GetOption("StarterGuild.Level", 0); if (level > 0 && !player->GetGuild() && (player->GetLevel() == level || (player->GetLevel() > level && previousLevel < level))) - addPlayerToGuild(player); + AddPlayerToGuild(player); } } void StarterGuild::OnPlayerFirstLogin(Player* player) { - if (sConfigMgr->GetOption("StarterGuild.Enable", true) && ((sConfigMgr->GetOption("StarterGuild.Level", 0) == 0)||player->GetLevel()>=sConfigMgr->GetOption("StarterGuild.Level", 0))) - addPlayerToGuild(player); + if (sConfigMgr->GetOption("StarterGuild.Enable", true) && + ((sConfigMgr->GetOption("StarterGuild.Level", 0) == 0) || player->GetLevel() >= sConfigMgr->GetOption("StarterGuild.Level", 0))) + AddPlayerToGuild(player); } -void StarterGuild::addPlayerToGuild(Player* player) +void StarterGuild::AddPlayerToGuild(Player* player) { - const uint32 GUILD_ID_HORDE = sConfigMgr->GetOption("StarterGuild.Horde", 1); - const uint32 GUILD_ID_ALLIANCE = sConfigMgr->GetOption("StarterGuild.Alliance", 2); + auto const GUILD_ID_HORDE = sConfigMgr->GetOption("StarterGuild.Horde", 1); + auto const GUILD_ID_ALLIANCE = sConfigMgr->GetOption("StarterGuild.Alliance", 2); - const std::string GUILD_WELCOME_TEXT_HORDE = sConfigMgr->GetOption("StarterGuild.HordeWelcomeText", "Lok’tar ogar! Welcome to the horde starter guild {GUILD} {PLAYER}."); - const std::string GUILD_WELCOME_TEXT_ALLIANCE = sConfigMgr->GetOption("StarterGuild.AllianceWelcomeText", "Welcome to the alliance starter guild {GUILD} {PLAYER}. For the Alliance!"); + auto const GUILD_WELCOME_TEXT_HORDE = sConfigMgr->GetOption("StarterGuild.HordeWelcomeText", "Lok’tar ogar! Welcome to the horde starter guild {GUILD} {PLAYER}."); + auto const GUILD_WELCOME_TEXT_ALLIANCE = + sConfigMgr->GetOption("StarterGuild.AllianceWelcomeText", "Welcome to the alliance starter guild {GUILD} {PLAYER}. For the Alliance!"); Guild* guild = sGuildMgr->GetGuildById(player->GetTeamId() == TEAM_ALLIANCE ? GUILD_ID_ALLIANCE : GUILD_ID_HORDE); // If a guild is present, assign the character to the guild; otherwise skip assignment. - if (guild) + if (!guild) { - if (guild->GetMemberCount() <= guildMemberCount) - { - guild->AddMember(player->GetGUID()); - - // Inform the player they have joined the guild - std::string welcome_text = player->GetTeamId() == TEAM_ALLIANCE ? GUILD_WELCOME_TEXT_ALLIANCE : GUILD_WELCOME_TEXT_HORDE; - std::string guild_name = player->GetGuildName(); - std::string player_name = player->GetPlayerName(); - - welcome_text = fmt::format( - fmt::runtime(welcome_text), - fmt::arg("GUILD", guild_name), - fmt::arg("PLAYER", player_name) - ); - - ChatHandler(player->GetSession()).SendSysMessage(welcome_text); - } - else - ChatHandler(player->GetSession()).SendSysMessage("The brotherhood has exceeded its membership limit."); - } - else ChatHandler(player->GetSession()).SendSysMessage("Brotherhood does not exist."); + return; + } + + if (guild->GetMemberCount() > guildMemberCount) + { + ChatHandler(player->GetSession()).SendSysMessage("The brotherhood has exceeded its membership limit."); + return; + } + + if (!guild->AddMember(player->GetGUID())) + { + LOG_ERROR("starterguild", + "Failed to add player {} (GUID {}) to guild {} (ID {}).", + player->GetPlayerName(), + player->GetGUID().ToString(), + guild->GetName(), + guild->GetId()); + ChatHandler(player->GetSession()).SendSysMessage("Failed to join guild."); + return; + } + + // Inform the player they have joined the guild + std::string welcome_text = player->GetTeamId() == TEAM_ALLIANCE ? GUILD_WELCOME_TEXT_ALLIANCE : GUILD_WELCOME_TEXT_HORDE; + std::string guild_name = guild->GetName(); + std::string player_name = player->GetPlayerName(); + + welcome_text = fmt::format(fmt::runtime(welcome_text), fmt::arg("GUILD", guild_name), fmt::arg("PLAYER", player_name)); + + ChatHandler(player->GetSession()).SendSysMessage(welcome_text); } diff --git a/src/mod_starterguild.h b/src/mod_starterguild.h index d332d5f..08e9ef5 100644 --- a/src/mod_starterguild.h +++ b/src/mod_starterguild.h @@ -55,8 +55,6 @@ This module automatically joins new players to a guild of your choice on first l #include "Chat.h" -#include "Configuration/Config.h" -#include "GuildMgr.h" #include "Player.h" #include "ScriptMgr.h" @@ -74,9 +72,9 @@ class StarterGuild : public PlayerScript void OnPlayerLogin(Player* player) override; void OnPlayerFirstLogin(Player* player) override; - void addPlayerToGuild(Player* player); - void OnPlayerLevelChanged(Player * player, uint8 previousLevel) override; + void OnPlayerLevelChanged(Player* player, uint8 previousLevel) override; + static void AddPlayerToGuild(Player* player); }; void AddStarterGuildScripts()