diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 70386d894..3d9199906 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -3028,6 +3028,9 @@ namespace Framework.Constants BattlefieldTbEastIntactNeutral = 5451, BattlefieldTbEastDamagedNeutral = 5452, + WarModeHordeBuffValue = 17042, + WarModeAllianceBuffValue = 17043, + CurrencyResetTime = 20001, // Next Arena Distribution Time WeeklyQuestResetTime = 20002, // Next Weekly Quest Reset Time BgDailyResetTime = 20003, // Next Daily Bg Reset Time diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index c24ad1e65..5f98269ff 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -2938,12 +2938,6 @@ namespace Game.Entities packet.AddState(2491, 15); // NA_UI_GUARDS_LEFT } - // Horde War Mode bonus - packet.AddState(17042, (uint)(10 + (Global.WorldMgr.GetWarModeDominantFaction() == TeamId.Alliance ? Global.WorldMgr.GetWarModeOutnumberedFactionReward() : 0))); - - // Alliance War Mode bonus - packet.AddState(17043, (uint)(10 + (Global.WorldMgr.GetWarModeDominantFaction() == TeamId.Horde ? Global.WorldMgr.GetWarModeOutnumberedFactionReward() : 0))); - // insert switch (zoneId) { diff --git a/Source/Game/World/WorldManager.cs b/Source/Game/World/WorldManager.cs index fb4ee6fe3..f4f588777 100644 --- a/Source/Game/World/WorldManager.cs +++ b/Source/Game/World/WorldManager.cs @@ -895,6 +895,10 @@ namespace Game Log.outInfo(LogFilter.ServerLoading, "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 + Global.WorldStateMgr.SetValue(WorldStates.WarModeHordeBuffValue, (int)GetWorldState(WorldStates.WarModeHordeBuffValue), null); + Global.WorldStateMgr.SetValue(WorldStates.WarModeAllianceBuffValue, (int)GetWorldState(WorldStates.WarModeAllianceBuffValue), null); + Global.ObjectMgr.LoadPhases(); Log.outInfo(LogFilter.ServerLoading, "Loading Conditions..."); @@ -1254,8 +1258,12 @@ namespace Game public void SetForcedWarModeFactionBalanceState(int team, int reward = 0) { - _warModeDominantFaction = team; - _warModeOutnumberedFactionReward = reward; + Global.WorldStateMgr.SetValue(WorldStates.WarModeHordeBuffValue, 10 + (team == TeamId.Alliance ? reward : 0), null); + Global.WorldStateMgr.SetValue(WorldStates.WarModeAllianceBuffValue, 10 + (team == TeamId.Horde ? reward : 0), null); + + // save to db + SetWorldState(WorldStates.WarModeHordeBuffValue, Global.WorldStateMgr.GetValue(WorldStates.WarModeHordeBuffValue, null)); + SetWorldState(WorldStates.WarModeAllianceBuffValue, Global.WorldStateMgr.GetValue(WorldStates.WarModeAllianceBuffValue, null)); } public void DisableForcedWarModeFactionBalanceState() @@ -2501,33 +2509,36 @@ namespace Game } while (result.NextRow()); } - _warModeDominantFaction = TeamId.Neutral; - _warModeOutnumberedFactionReward = 0; - if (warModeEnabledFaction.All(val => val == 0)) - return; - - long dominantFactionCount = warModeEnabledFaction[TeamId.Alliance]; int dominantFaction = TeamId.Alliance; - if (warModeEnabledFaction[TeamId.Alliance] < warModeEnabledFaction[TeamId.Horde]) + int outnumberedFactionReward = 0; + + if (warModeEnabledFaction.Any(val => val != 0)) { - dominantFactionCount = warModeEnabledFaction[TeamId.Horde]; - dominantFaction = TeamId.Horde; + long dominantFactionCount = warModeEnabledFaction[TeamId.Alliance]; + if (warModeEnabledFaction[TeamId.Alliance] < warModeEnabledFaction[TeamId.Horde]) + { + dominantFactionCount = warModeEnabledFaction[TeamId.Horde]; + dominantFaction = TeamId.Horde; + } + + double total = warModeEnabledFaction[TeamId.Alliance] + warModeEnabledFaction[TeamId.Horde]; + double pct = dominantFactionCount / total; + + if (pct >= WorldConfig.GetFloatValue(WorldCfg.CallToArms20Pct)) + outnumberedFactionReward = 20; + else if (pct >= WorldConfig.GetFloatValue(WorldCfg.CallToArms10Pct)) + outnumberedFactionReward = 10; + else if (pct >= WorldConfig.GetFloatValue(WorldCfg.CallToArms5Pct)) + outnumberedFactionReward = 5; } - double total = warModeEnabledFaction[TeamId.Alliance] + warModeEnabledFaction[TeamId.Horde]; - double pct = dominantFactionCount / total; + Global.WorldStateMgr.SetValue(WorldStates.WarModeHordeBuffValue, 10 + (dominantFaction == TeamId.Alliance ? outnumberedFactionReward : 0), null); + Global.WorldStateMgr.SetValue(WorldStates.WarModeAllianceBuffValue, 10 + (dominantFaction == TeamId.Horde ? outnumberedFactionReward : 0), null); - if (pct >= WorldConfig.GetFloatValue(WorldCfg.CallToArms20Pct)) - _warModeOutnumberedFactionReward = 20; - else if (pct >= WorldConfig.GetFloatValue(WorldCfg.CallToArms10Pct)) - _warModeOutnumberedFactionReward = 10; - else if (pct >= WorldConfig.GetFloatValue(WorldCfg.CallToArms5Pct)) - _warModeOutnumberedFactionReward = 5; - else - return; - - _warModeDominantFaction = dominantFaction; + // save to db + SetWorldState(WorldStates.WarModeHordeBuffValue, Global.WorldStateMgr.GetValue(WorldStates.WarModeHordeBuffValue, null)); + SetWorldState(WorldStates.WarModeAllianceBuffValue, Global.WorldStateMgr.GetValue(WorldStates.WarModeAllianceBuffValue, null)); } public uint GetVirtualRealmAddress() @@ -2558,10 +2569,6 @@ namespace Game public bool IsGuidWarning() { return _guidWarn; } public bool IsGuidAlert() { return _guidAlert; } - - // War mode balancing - public int GetWarModeDominantFaction() { return _warModeDominantFaction; } - public int GetWarModeOutnumberedFactionReward() { return _warModeOutnumberedFactionReward; } public WorldUpdateTime GetWorldUpdateTime() { return _worldUpdateTime; } @@ -2638,10 +2645,6 @@ namespace Game bool _guidAlert; uint _warnDiff; long _warnShutdownTime; - - // War mode balancing - int _warModeDominantFaction; // the team that has higher percentage - int _warModeOutnumberedFactionReward; #endregion } diff --git a/Source/Game/World/WorldStateManager.cs b/Source/Game/World/WorldStateManager.cs index b92097f25..3211c15c0 100644 --- a/Source/Game/World/WorldStateManager.cs +++ b/Source/Game/World/WorldStateManager.cs @@ -140,6 +140,11 @@ namespace Game return _worldStateTemplates.LookupByKey(worldStateId); } + public int GetValue(WorldStates worldStateId, Map map) + { + return GetValue((int)worldStateId, map); + } + public int GetValue(int worldStateId, Map map) { WorldStateTemplate worldStateTemplate = GetWorldStateTemplate(worldStateId); diff --git a/Source/Scripts/Spells/Generic.cs b/Source/Scripts/Spells/Generic.cs index d70622d4a..455edbffa 100644 --- a/Source/Scripts/Spells/Generic.cs +++ b/Source/Scripts/Spells/Generic.cs @@ -4441,10 +4441,15 @@ namespace Scripts.Spells.Generic if (target == null) return; - if (target.GetTeamId() == Global.WorldMgr.GetWarModeDominantFaction()) - return; - - amount += Global.WorldMgr.GetWarModeOutnumberedFactionReward(); + switch (target.GetTeamId()) + { + case TeamId.Alliance: + amount = Global.WorldStateMgr.GetValue(WorldStates.WarModeAllianceBuffValue, null); + break; + case TeamId.Horde: + amount = Global.WorldStateMgr.GetValue(WorldStates.WarModeHordeBuffValue, null); + break; + } } public override void Register() 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 000000000..a66e2d3ea --- /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');