diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-07-01 15:19:31 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-07-01 15:19:31 +0200 |
commit | 4ac86c13d2b00817c9213ca2c22b747d3fff454e (patch) | |
tree | c40dab4bf4ef1211a91e0f5215de2e6ade95901e | |
parent | cfca26c2641f684533e07d9933ba1f31e5ef8204 (diff) |
Core/WorldStates: Migrate war mode bonus value worldstates to new system
-rw-r--r-- | sql/updates/world/master/2022_07_01_00_world.sql | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 3 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 61 | ||||
-rw-r--r-- | src/server/game/World/World.h | 5 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 15 |
6 files changed, 51 insertions, 43 deletions
diff --git a/sql/updates/world/master/2022_07_01_00_world.sql b/sql/updates/world/master/2022_07_01_00_world.sql new file mode 100644 index 00000000000..a66e2d3ea38 --- /dev/null +++ b/sql/updates/world/master/2022_07_01_00_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `world_state` WHERE `ID` IN (17042,17043); +INSERT INTO `world_state` (`ID`,`DefaultValue`,`MapIDs`,`AreaIDs`,`Comment`) VALUES +(17042,10,NULL,NULL,'Horde War Mode bonus'), +(17043,10,NULL,NULL,'Alliance War Mode bonus'); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ad76fa5779e..e0420958d71 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9240,12 +9240,6 @@ void Player::SendInitWorldStates(uint32 zoneId, uint32 areaId) packet.Worldstates.emplace_back(2491, 15); // NA_UI_GUARDS_LEFT } - // Horde War Mode bonus - packet.Worldstates.emplace_back(17042, 10 + (sWorld->GetWarModeDominantFaction() == TEAM_ALLIANCE ? sWorld->GetWarModeOutnumberedFactionReward() : 0)); - - // Alliance War Mode bonus - packet.Worldstates.emplace_back(17043, 10 + (sWorld->GetWarModeDominantFaction() == TEAM_HORDE ? sWorld->GetWarModeOutnumberedFactionReward() : 0)); - switch (zoneId) { case 1: // Dun Morogh diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 29d05a81b3c..9edb899361f 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -7833,6 +7833,9 @@ enum WorldState : uint32 WS_BATTLEFIELD_TB_EAST_INTACT_NEUTRAL = 5451, WS_BATTLEFIELD_TB_EAST_DAMAGED_NEUTRAL = 5452, + WS_WAR_MODE_HORDE_BUFF_VALUE = 17042, + WS_WAR_MODE_ALLIANCE_BUFF_VALUE = 17043, + WS_CURRENCY_RESET_TIME = 20001, // Next arena distribution time WS_WEEKLY_QUEST_RESET_TIME = 20002, // Next weekly quest reset time WS_BG_DAILY_RESET_TIME = 20003, // Next daily BG reset time diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 94b36940189..17247bde9d7 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -160,9 +160,6 @@ World::World() _guidAlert = false; _warnDiff = 0; _warnShutdownTime = GameTime::GetGameTime(); - - _warModeDominantFaction = TEAM_NEUTRAL; - _warModeOutnumberedFactionReward = 0; } /// World destructor @@ -2248,6 +2245,10 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Loading World States..."); // must be loaded before battleground, outdoor PvP and conditions LoadWorldStates(); + // TODO: this is temporary until custom world states are purged from old world state saved values + sWorldStateMgr->SetValue(WS_WAR_MODE_HORDE_BUFF_VALUE, getWorldState(WS_WAR_MODE_HORDE_BUFF_VALUE), nullptr); + sWorldStateMgr->SetValue(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, getWorldState(WS_WAR_MODE_ALLIANCE_BUFF_VALUE), nullptr); + sObjectMgr->LoadPhases(); TC_LOG_INFO("server.loading", "Loading Conditions..."); @@ -2494,8 +2495,12 @@ void World::SetInitialWorldSettings() void World::SetForcedWarModeFactionBalanceState(TeamId team, int32 reward) { - _warModeDominantFaction = team; - _warModeOutnumberedFactionReward = reward; + sWorldStateMgr->SetValue(WS_WAR_MODE_HORDE_BUFF_VALUE, 10 + (team == TEAM_ALLIANCE ? reward : 0), nullptr); + sWorldStateMgr->SetValue(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, 10 + (team == TEAM_HORDE ? reward : 0), nullptr); + + // save to db + setWorldState(WS_WAR_MODE_HORDE_BUFF_VALUE, sWorldStateMgr->GetValue(WS_WAR_MODE_HORDE_BUFF_VALUE, nullptr)); + setWorldState(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, sWorldStateMgr->GetValue(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, nullptr)); } void World::DisableForcedWarModeFactionBalanceState() @@ -3919,33 +3924,35 @@ void World::UpdateWarModeRewardValues() } while (result->NextRow()); } - _warModeDominantFaction = TEAM_NEUTRAL; - _warModeOutnumberedFactionReward = 0; - - if (std::all_of(warModeEnabledFaction.begin(), warModeEnabledFaction.end(), [](int64 val) { return val == 0; })) - return; - - int64 dominantFactionCount = warModeEnabledFaction[TEAM_ALLIANCE]; TeamId dominantFaction = TEAM_ALLIANCE; - if (warModeEnabledFaction[TEAM_ALLIANCE] < warModeEnabledFaction[TEAM_HORDE]) + int32 outnumberedFactionReward = 0; + + if (std::any_of(warModeEnabledFaction.begin(), warModeEnabledFaction.end(), [](int64 val) { return val != 0; })) { - dominantFactionCount = warModeEnabledFaction[TEAM_HORDE]; - dominantFaction = TEAM_HORDE; - } + int64 dominantFactionCount = warModeEnabledFaction[TEAM_ALLIANCE]; + if (warModeEnabledFaction[TEAM_ALLIANCE] < warModeEnabledFaction[TEAM_HORDE]) + { + dominantFactionCount = warModeEnabledFaction[TEAM_HORDE]; + dominantFaction = TEAM_HORDE; + } - double total = warModeEnabledFaction[TEAM_ALLIANCE] + warModeEnabledFaction[TEAM_HORDE]; - double pct = dominantFactionCount / total; + double total = warModeEnabledFaction[TEAM_ALLIANCE] + warModeEnabledFaction[TEAM_HORDE]; + double pct = dominantFactionCount / total; - if (pct >= sWorld->getFloatConfig(CONFIG_CALL_TO_ARMS_20_PCT)) - _warModeOutnumberedFactionReward = 20; - else if (pct >= sWorld->getFloatConfig(CONFIG_CALL_TO_ARMS_10_PCT)) - _warModeOutnumberedFactionReward = 10; - else if (pct >= sWorld->getFloatConfig(CONFIG_CALL_TO_ARMS_5_PCT)) - _warModeOutnumberedFactionReward = 5; - else - return; + if (pct >= sWorld->getFloatConfig(CONFIG_CALL_TO_ARMS_20_PCT)) + outnumberedFactionReward = 20; + else if (pct >= sWorld->getFloatConfig(CONFIG_CALL_TO_ARMS_10_PCT)) + outnumberedFactionReward = 10; + else if (pct >= sWorld->getFloatConfig(CONFIG_CALL_TO_ARMS_5_PCT)) + outnumberedFactionReward = 5; + } + + sWorldStateMgr->SetValue(WS_WAR_MODE_HORDE_BUFF_VALUE, 10 + (dominantFaction == TEAM_ALLIANCE ? outnumberedFactionReward : 0), nullptr); + sWorldStateMgr->SetValue(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, 10 + (dominantFaction == TEAM_HORDE ? outnumberedFactionReward : 0), nullptr); - _warModeDominantFaction = dominantFaction; + // save to db + setWorldState(WS_WAR_MODE_HORDE_BUFF_VALUE, sWorldStateMgr->GetValue(WS_WAR_MODE_HORDE_BUFF_VALUE, nullptr)); + setWorldState(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, sWorldStateMgr->GetValue(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, nullptr)); } Realm realm; diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index eb49382921f..70634f51a42 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -805,8 +805,6 @@ class TC_GAME_API World bool IsGuidAlert() { return _guidAlert; } // War mode balancing - TeamId GetWarModeDominantFaction() const { return _warModeDominantFaction; } - int32 GetWarModeOutnumberedFactionReward() const { return _warModeOutnumberedFactionReward; } void SetForcedWarModeFactionBalanceState(TeamId team, int32 reward = 0); void DisableForcedWarModeFactionBalanceState(); @@ -938,9 +936,6 @@ class TC_GAME_API World // War mode balancing void UpdateWarModeRewardValues(); - TeamId _warModeDominantFaction; // the team that has higher percentage - int32 _warModeOutnumberedFactionReward; - friend class debug_commandscript; }; diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 5127602b02e..89f49b6fa41 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -45,7 +45,7 @@ #include "SpellPackets.h" #include "SpellScript.h" #include "Vehicle.h" -#include "World.h" +#include "WorldStateMgr.h" class spell_gen_absorb0_hitlimit1 : public AuraScript { @@ -4821,10 +4821,15 @@ class spell_gen_war_mode_enlisted : public AuraScript if (!target) return; - if (target->GetTeamId() == sWorld->GetWarModeDominantFaction()) - return; - - amount += sWorld->GetWarModeOutnumberedFactionReward(); + switch (target->GetTeamId()) + { + case TEAM_ALLIANCE: + amount = sWorldStateMgr->GetValue(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, nullptr); + break; + case TEAM_HORDE: + amount = sWorldStateMgr->GetValue(WS_WAR_MODE_HORDE_BUFF_VALUE, nullptr); + break; + } } void Register() override |