Core/WorldStates: Migrate war mode bonus value worldstates to new system

Port From (https://github.com/TrinityCore/TrinityCore/commit/4ac86c13d2b00817c9213ca2c22b747d3fff454e)
This commit is contained in:
hondacrx
2022-07-01 22:53:01 -04:00
parent 25bbf63341
commit cabb59efe8
6 changed files with 55 additions and 41 deletions
@@ -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
-6
View File
@@ -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 <field> <value>
switch (zoneId)
{
+25 -22
View File
@@ -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,14 +2509,13 @@ 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;
int outnumberedFactionReward = 0;
if (warModeEnabledFaction.Any(val => val != 0))
{
long dominantFactionCount = warModeEnabledFaction[TeamId.Alliance];
if (warModeEnabledFaction[TeamId.Alliance] < warModeEnabledFaction[TeamId.Horde])
{
dominantFactionCount = warModeEnabledFaction[TeamId.Horde];
@@ -2519,15 +2526,19 @@ namespace Game
double pct = dominantFactionCount / total;
if (pct >= WorldConfig.GetFloatValue(WorldCfg.CallToArms20Pct))
_warModeOutnumberedFactionReward = 20;
outnumberedFactionReward = 20;
else if (pct >= WorldConfig.GetFloatValue(WorldCfg.CallToArms10Pct))
_warModeOutnumberedFactionReward = 10;
outnumberedFactionReward = 10;
else if (pct >= WorldConfig.GetFloatValue(WorldCfg.CallToArms5Pct))
_warModeOutnumberedFactionReward = 5;
else
return;
outnumberedFactionReward = 5;
}
_warModeDominantFaction = dominantFaction;
Global.WorldStateMgr.SetValue(WorldStates.WarModeHordeBuffValue, 10 + (dominantFaction == TeamId.Alliance ? outnumberedFactionReward : 0), null);
Global.WorldStateMgr.SetValue(WorldStates.WarModeAllianceBuffValue, 10 + (dominantFaction == TeamId.Horde ? outnumberedFactionReward : 0), null);
// save to db
SetWorldState(WorldStates.WarModeHordeBuffValue, Global.WorldStateMgr.GetValue(WorldStates.WarModeHordeBuffValue, null));
SetWorldState(WorldStates.WarModeAllianceBuffValue, Global.WorldStateMgr.GetValue(WorldStates.WarModeAllianceBuffValue, null));
}
public uint GetVirtualRealmAddress()
@@ -2559,10 +2570,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; }
#region Fields
@@ -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
}
+5
View File
@@ -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);
+9 -4
View File
@@ -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()
@@ -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');