diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index ec409ee13..7844a37de 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1818,7 +1818,9 @@ void Battleground::HandleTriggerBuff(GameObject* gameObject) uint32 index = 0; for (; index < BgObjects.size() && BgObjects[index] != gameObject->GetGUID(); ++index); if (BgObjects[index] != gameObject->GetGUID()) + { return; + } if (m_BuffChange) { @@ -1835,7 +1837,26 @@ void Battleground::HandleTriggerBuff(GameObject* gameObject) } } - SpawnBGObject(index, BUFF_RESPAWN_TIME); + uint32 respawnTime = SPEED_BUFF_RESPAWN_TIME; + if (Map* map = FindBgMap()) + { + if (GameObject* obj = map->GetGameObject(BgObjects[index])) + { + switch (obj->GetEntry()) + { + case BG_OBJECTID_REGENBUFF_ENTRY: + respawnTime = RESTORATION_BUFF_RESPAWN_TIME; + break; + case BG_OBJECTID_BERSERKERBUFF_ENTRY: + respawnTime = BERSERKING_BUFF_RESPAWN_TIME; + break; + default: + break; + } + } + } + + SpawnBGObject(index, respawnTime); } void Battleground::HandleKillPlayer(Player* victim, Player* killer) diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 8d772846a..a8a326c4f 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -136,7 +136,9 @@ enum BattlegroundTimeIntervals }; #define RESURRECTION_INTERVAL (sWorld->getIntConfig(CONFIG_BATTLEGROUND_PLAYER_RESPAWN) * IN_MILLISECONDS) -#define BUFF_RESPAWN_TIME (sWorld->getIntConfig(CONFIG_BATTLEGROUND_BUFF_RESPAWN)) +#define RESTORATION_BUFF_RESPAWN_TIME (sWorld->getIntConfig(CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN)) +#define BERSERKING_BUFF_RESPAWN_TIME (sWorld->getIntConfig(CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN)) +#define SPEED_BUFF_RESPAWN_TIME (sWorld->getIntConfig(CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN)) enum BattlegroundStartTimeIntervals { diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index 4dc58fa09..ad91be7ff 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -405,12 +405,12 @@ bool BattlegroundWS::SetupBattleground() AddObject(BG_WS_OBJECT_A_FLAG, BG_OBJECT_A_FLAG_WS_ENTRY, 1540.423f, 1481.325f, 351.8284f, 3.089233f, 0, 0, 0.9996573f, 0.02617699f, RESPAWN_IMMEDIATELY); AddObject(BG_WS_OBJECT_H_FLAG, BG_OBJECT_H_FLAG_WS_ENTRY, 916.0226f, 1434.405f, 345.413f, 0.01745329f, 0, 0, 0.008726535f, 0.9999619f, RESPAWN_IMMEDIATELY); // buffs - AddObject(BG_WS_OBJECT_SPEEDBUFF_1, BG_OBJECTID_SPEEDBUFF_ENTRY, 1449.93f, 1470.71f, 342.6346f, -1.64061f, 0, 0, 0.7313537f, -0.6819983f, BUFF_RESPAWN_TIME); - AddObject(BG_WS_OBJECT_SPEEDBUFF_2, BG_OBJECTID_SPEEDBUFF_ENTRY, 1005.171f, 1447.946f, 335.9032f, 1.64061f, 0, 0, 0.7313537f, 0.6819984f, BUFF_RESPAWN_TIME); - AddObject(BG_WS_OBJECT_REGENBUFF_1, BG_OBJECTID_REGENBUFF_ENTRY, 1317.506f, 1550.851f, 313.2344f, -0.2617996f, 0, 0, 0.1305263f, -0.9914448f, BUFF_RESPAWN_TIME); - AddObject(BG_WS_OBJECT_REGENBUFF_2, BG_OBJECTID_REGENBUFF_ENTRY, 1110.451f, 1353.656f, 316.5181f, -0.6806787f, 0, 0, 0.333807f, -0.9426414f, BUFF_RESPAWN_TIME); - AddObject(BG_WS_OBJECT_BERSERKBUFF_1, BG_OBJECTID_BERSERKERBUFF_ENTRY, 1320.09f, 1378.79f, 314.7532f, 1.186824f, 0, 0, 0.5591929f, 0.8290376f, BUFF_RESPAWN_TIME); - AddObject(BG_WS_OBJECT_BERSERKBUFF_2, BG_OBJECTID_BERSERKERBUFF_ENTRY, 1139.688f, 1560.288f, 306.8432f, -2.443461f, 0, 0, 0.9396926f, -0.3420201f, BUFF_RESPAWN_TIME); + AddObject(BG_WS_OBJECT_SPEEDBUFF_1, BG_OBJECTID_SPEEDBUFF_ENTRY, 1449.93f, 1470.71f, 342.6346f, -1.64061f, 0, 0, 0.7313537f, -0.6819983f, SPEED_BUFF_RESPAWN_TIME); + AddObject(BG_WS_OBJECT_SPEEDBUFF_2, BG_OBJECTID_SPEEDBUFF_ENTRY, 1005.171f, 1447.946f, 335.9032f, 1.64061f, 0, 0, 0.7313537f, 0.6819984f, SPEED_BUFF_RESPAWN_TIME); + AddObject(BG_WS_OBJECT_REGENBUFF_1, BG_OBJECTID_REGENBUFF_ENTRY, 1317.506f, 1550.851f, 313.2344f, -0.2617996f, 0, 0, 0.1305263f, -0.9914448f, RESTORATION_BUFF_RESPAWN_TIME); + AddObject(BG_WS_OBJECT_REGENBUFF_2, BG_OBJECTID_REGENBUFF_ENTRY, 1110.451f, 1353.656f, 316.5181f, -0.6806787f, 0, 0, 0.333807f, -0.9426414f, RESTORATION_BUFF_RESPAWN_TIME); + AddObject(BG_WS_OBJECT_BERSERKBUFF_1, BG_OBJECTID_BERSERKERBUFF_ENTRY, 1320.09f, 1378.79f, 314.7532f, 1.186824f, 0, 0, 0.5591929f, 0.8290376f, BERSERKING_BUFF_RESPAWN_TIME); + AddObject(BG_WS_OBJECT_BERSERKBUFF_2, BG_OBJECTID_BERSERKERBUFF_ENTRY, 1139.688f, 1560.288f, 306.8432f, -2.443461f, 0, 0, 0.9396926f, -0.3420201f, BERSERKING_BUFF_RESPAWN_TIME); // alliance gates AddObject(BG_WS_OBJECT_DOOR_A_1, BG_OBJECT_DOOR_A_1_WS_ENTRY, 1503.335f, 1493.466f, 352.1888f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY); AddObject(BG_WS_OBJECT_DOOR_A_2, BG_OBJECT_DOOR_A_2_WS_ENTRY, 1492.478f, 1457.912f, 342.9689f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY); diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index e1e2ea535..9410b55e8 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -284,7 +284,9 @@ enum WorldIntConfigs CONFIG_BATTLEGROUND_REPORT_AFK, CONFIG_BATTLEGROUND_INVITATION_TYPE, CONFIG_BATTLEGROUND_PLAYER_RESPAWN, - CONFIG_BATTLEGROUND_BUFF_RESPAWN, + CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN, + CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN, + CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_LIMIT_MIN_LEVEL, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_LIMIT_MIN_PLAYERS, CONFIG_ARENA_MAX_RATING_DIFFERENCE, diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index be681f923..88faf6a57 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1123,11 +1123,23 @@ void World::LoadConfigSettings(bool reload) LOG_ERROR("server.loading", "Battleground.PlayerRespawn (%i) must be >2. Using 30 instead.", m_int_configs[CONFIG_BATTLEGROUND_PLAYER_RESPAWN]); m_int_configs[CONFIG_BATTLEGROUND_PLAYER_RESPAWN] = 30; } - m_int_configs[CONFIG_BATTLEGROUND_BUFF_RESPAWN] = sConfigMgr->GetOption("Battleground.BuffRespawn", 180); - if (m_int_configs[CONFIG_BATTLEGROUND_BUFF_RESPAWN] < 1) + m_int_configs[CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN] = sConfigMgr->GetOption("Battleground.RestorationBuffRespawn", 20); + if (m_int_configs[CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN] < 1) { - LOG_ERROR("server.loading", "Battleground.BuffRespawn (%i) must be >0. Using 180 instead.", m_int_configs[CONFIG_BATTLEGROUND_BUFF_RESPAWN]); - m_int_configs[CONFIG_BATTLEGROUND_BUFF_RESPAWN] = 180; + LOG_ERROR("server.loading", "Battleground.RestorationBuffRespawn (%i) must be > 0. Using 20 instead.", m_int_configs[CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN]); + m_int_configs[CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN] = 20; + } + m_int_configs[CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN] = sConfigMgr->GetOption("Battleground.BerserkingBuffRespawn", 120); + if (m_int_configs[CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN] < 1) + { + LOG_ERROR("server.loading", "Battleground.BerserkingBuffRespawn (%i) must be > 0. Using 120 instead.", m_int_configs[CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN]); + m_int_configs[CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN] = 120; + } + m_int_configs[CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN] = sConfigMgr->GetOption("Battleground.SpeedBuffRespawn", 150); + if (m_int_configs[CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN] < 1) + { + LOG_ERROR("server.loading", "Battleground.SpeedBuffRespawn (%i) must be > 0. Using 150 instead.", m_int_configs[CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN]); + m_int_configs[CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN] = 150; } m_int_configs[CONFIG_ARENA_MAX_RATING_DIFFERENCE] = sConfigMgr->GetOption ("Arena.MaxRatingDifference", 150); diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index f7a9af0f6..9bbdf6fe3 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2672,11 +2672,25 @@ Battleground.RewardLoserHonorLast = 5 Battleground.PlayerRespawn = 30 # -# Battleground.BuffRespawn -# Description: Battleground buff respawn time (in seconds). -# Default: 180 (Recommended 10+) +# Battleground.RestorationBuffRespawn +# Description: Battleground restoration buff respawn time (in seconds). +# Default: 20 (Recommended 10+) -Battleground.BuffRespawn = 180 +Battleground.RestorationBuffRespawn = 20 + +# +# Battleground.BerserkingBuffRespawn +# Description: Battleground berserking buff respawn time (in seconds). +# Default: 120 (Recommended 10+) + +Battleground.BerserkingBuffRespawn = 120 + +# +# Battleground.SpeedBuffRespawn +# Description: Battleground speed buff respawn time (in seconds). +# Default: 150 (Recommended 10+) + +Battleground.SpeedBuffRespawn = 150 # ###################################################################################################