aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2022_07_01_00_world.sql4
-rw-r--r--src/server/game/Entities/Player/Player.cpp6
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h3
-rw-r--r--src/server/game/World/World.cpp61
-rw-r--r--src/server/game/World/World.h5
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp15
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