feat(Core/LFG): move the LFG max kick count & kick prevention timers … (#8683)

This commit is contained in:
Skjalf
2021-10-25 05:17:12 -03:00
committed by GitHub
parent d72b741fbf
commit fffdb31c05
7 changed files with 47 additions and 12 deletions

View File

@@ -17,12 +17,12 @@
#include "LFG.h" #include "LFG.h"
#include "LFGGroupData.h" #include "LFGGroupData.h"
#include "World.h"
namespace lfg namespace lfg
{ {
LfgGroupData::LfgGroupData(): m_State(LFG_STATE_NONE), m_OldState(LFG_STATE_NONE), LfgGroupData::LfgGroupData(): m_State(LFG_STATE_NONE), m_OldState(LFG_STATE_NONE),
m_Dungeon(0), m_KicksLeft(LFG_GROUP_MAX_KICKS) m_Dungeon(0), m_KicksLeft(sWorld->getIntConfig(CONFIG_LFG_MAX_KICK_COUNT))
{ } { }
LfgGroupData::~LfgGroupData() LfgGroupData::~LfgGroupData()
@@ -39,7 +39,7 @@ namespace lfg
{ {
case LFG_STATE_NONE: case LFG_STATE_NONE:
m_Dungeon = 0; m_Dungeon = 0;
m_KicksLeft = LFG_GROUP_MAX_KICKS; m_KicksLeft = sWorld->getIntConfig(CONFIG_LFG_MAX_KICK_COUNT);
[[fallthrough]]; [[fallthrough]];
case LFG_STATE_FINISHED_DUNGEON: case LFG_STATE_FINISHED_DUNGEON:
case LFG_STATE_DUNGEON: case LFG_STATE_DUNGEON:

View File

@@ -22,12 +22,6 @@
namespace lfg namespace lfg
{ {
enum LfgGroupEnum
{
LFG_GROUP_MAX_KICKS = 2,
};
/** /**
Stores all lfg data needed about a group. Stores all lfg data needed about a group.
*/ */

View File

@@ -12183,9 +12183,13 @@ PartyResult Player::CanUninviteFromGroup(ObjectGuid targetPlayerGUID) const
if (Player* target = ObjectAccessor::FindConnectedPlayer(targetPlayerGUID)) if (Player* target = ObjectAccessor::FindConnectedPlayer(targetPlayerGUID))
{ {
if (target->HasAura(lfg::LFG_SPELL_DUNGEON_COOLDOWN)) if (Aura* dungeonCooldownAura = target->GetAura(lfg::LFG_SPELL_DUNGEON_COOLDOWN))
{ {
return ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S; int32 elapsedTime = dungeonCooldownAura->GetMaxDuration() - dungeonCooldownAura->GetDuration();
if (static_cast<int32>(sWorld->getIntConfig(CONFIG_LFG_KICK_PREVENTION_TIMER)) > elapsedTime)
{
return ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S;
}
} }
} }

View File

@@ -340,7 +340,11 @@ void WorldSession::HandleGroupUninviteGuidOpcode(WorldPacket& recvData)
{ {
if (Aura* dungeonCooldownAura = kickTarget->GetAura(lfg::LFG_SPELL_DUNGEON_COOLDOWN)) if (Aura* dungeonCooldownAura = kickTarget->GetAura(lfg::LFG_SPELL_DUNGEON_COOLDOWN))
{ {
SendPartyResult(PARTY_OP_UNINVITE, name, res, dungeonCooldownAura->GetDuration() / 1000); int32 elapsedTime = dungeonCooldownAura->GetMaxDuration() - dungeonCooldownAura->GetDuration();
if (static_cast<int32>(sWorld->getIntConfig(CONFIG_LFG_KICK_PREVENTION_TIMER)) > elapsedTime)
{
SendPartyResult(PARTY_OP_UNINVITE, name, res, (sWorld->getIntConfig(CONFIG_LFG_KICK_PREVENTION_TIMER) - elapsedTime) / 1000);
}
} }
} }
} else } else

View File

@@ -390,6 +390,8 @@ enum WorldIntConfigs
CONFIG_NPC_REGEN_TIME_IF_NOT_REACHABLE_IN_RAID, CONFIG_NPC_REGEN_TIME_IF_NOT_REACHABLE_IN_RAID,
CONFIG_FFA_PVP_TIMER, CONFIG_FFA_PVP_TIMER,
CONFIG_LOOT_NEED_BEFORE_GREED_ILVL_RESTRICTION, CONFIG_LOOT_NEED_BEFORE_GREED_ILVL_RESTRICTION,
CONFIG_LFG_MAX_KICK_COUNT,
CONFIG_LFG_KICK_PREVENTION_TIMER,
INT_CONFIG_VALUE_COUNT INT_CONFIG_VALUE_COUNT
}; };

View File

@@ -1419,6 +1419,21 @@ void World::LoadConfigSettings(bool reload)
// Specifies if IP addresses can be logged to the database // Specifies if IP addresses can be logged to the database
m_bool_configs[CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE] = sConfigMgr->GetOption<bool>("AllowLoggingIPAddressesInDatabase", true, true); m_bool_configs[CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE] = sConfigMgr->GetOption<bool>("AllowLoggingIPAddressesInDatabase", true, true);
// LFG group mechanics.
m_int_configs[CONFIG_LFG_MAX_KICK_COUNT] = sConfigMgr->GetOption<int32>("LFG.MaxKickCount", 2);
if (m_int_configs[CONFIG_LFG_MAX_KICK_COUNT] > 3)
{
m_int_configs[CONFIG_LFG_MAX_KICK_COUNT] = 3;
LOG_ERROR("server.loading", "LFG.MaxKickCount can't be higher than 3.");
}
m_int_configs[CONFIG_LFG_KICK_PREVENTION_TIMER] = sConfigMgr->GetOption<int32>("LFG.KickPreventionTimer", 15 * MINUTE * IN_MILLISECONDS) * IN_MILLISECONDS;
if (m_int_configs[CONFIG_LFG_KICK_PREVENTION_TIMER] > 15 * MINUTE * IN_MILLISECONDS)
{
m_int_configs[CONFIG_LFG_KICK_PREVENTION_TIMER] = 15 * MINUTE * IN_MILLISECONDS;
LOG_ERROR("server.loading", "LFG.KickPreventionTimer can't be higher than 15 minutes.");
}
// call ScriptMgr if we're reloading the configuration // call ScriptMgr if we're reloading the configuration
sScriptMgr->OnAfterConfigLoad(reload); sScriptMgr->OnAfterConfigLoad(reload);
} }

View File

@@ -3570,6 +3570,22 @@ FFAPvPTimer = 30
LootNeedBeforeGreedILvlRestriction = 70 LootNeedBeforeGreedILvlRestriction = 70
#
# LFG.MaxKickCount
# Description: Specify the maximum number of kicks allowed in LFG groups (max 3 kicks)
# Default: 2
# 0 - Disabled (kicks are never allowed)
LFG.MaxKickCount = 2
#
# LFG.KickPreventionTimer
# Description: Specify for how long players are prevented from being kicked after just joining LFG groups
# Default: 900 secs (15 minutes)
# 0 - Disabled
LFG.KickPreventionTimer = 900
# #
################################################################################################### ###################################################################################################