mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/WorldStates: Migrate war mode bonus value worldstates to new system
This commit is contained in:
4
sql/updates/world/master/2022_07_01_00_world.sql
Normal file
4
sql/updates/world/master/2022_07_01_00_world.sql
Normal file
@@ -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');
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
double total = warModeEnabledFaction[TEAM_ALLIANCE] + warModeEnabledFaction[TEAM_HORDE];
|
||||
double pct = dominantFactionCount / total;
|
||||
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);
|
||||
|
||||
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;
|
||||
|
||||
_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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user