Core/WorldStates: Migrate OutdoorPvP worldstates to new system
Port From (https://github.com/TrinityCore/TrinityCore/commit/36ff703df55704265a28e28f4ea9f9cdcb54e85c)
This commit is contained in:
@@ -2905,7 +2905,6 @@ namespace Game.Entities
|
||||
{
|
||||
// data depends on zoneid/mapid...
|
||||
uint mapid = GetMapId();
|
||||
OutdoorPvP pvp = Global.OutdoorPvPMgr.GetOutdoorPvPToZoneId(zoneId);
|
||||
|
||||
InitWorldStates packet = new();
|
||||
packet.MapID = mapid;
|
||||
@@ -2932,174 +2931,6 @@ namespace Game.Entities
|
||||
previousArenaSeason = WorldConfig.GetUIntValue(WorldCfg.ArenaSeasonId) - 1;// 0 - End of season
|
||||
packet.AddState(3901, previousArenaSeason);
|
||||
|
||||
if (mapid == 530) // Outland
|
||||
{
|
||||
packet.AddState(2495, 0); // NA_UI_OUTLAND_01 "Progress: %2494w"
|
||||
packet.AddState(2493, 15); // NA_UI_GUARDS_MAX
|
||||
packet.AddState(2491, 15); // NA_UI_GUARDS_LEFT
|
||||
}
|
||||
|
||||
// insert <field> <value>
|
||||
switch (zoneId)
|
||||
{
|
||||
case 1: // Dun Morogh
|
||||
case 11: // Wetlands
|
||||
case 12: // Elwynn Forest
|
||||
case 38: // Loch Modan
|
||||
case 40: // Westfall
|
||||
case 51: // Searing Gorge
|
||||
case 1519: // Stormwind City
|
||||
case 1537: // Ironforge
|
||||
case 2257: // Deeprun Tram
|
||||
case 3703: // Shattrath City});
|
||||
break;
|
||||
case 1377: // Silithus
|
||||
if (pvp != null && pvp.GetTypeId() == OutdoorPvPTypes.Silithus)
|
||||
pvp.FillInitialWorldStates(packet);
|
||||
else
|
||||
{
|
||||
packet.AddState(2313, 0); // SI_GATHERED_A
|
||||
packet.AddState(2314, 0); // SI_GATHERED_H
|
||||
packet.AddState(2317, 0); // SI_SILITHYST_MAX
|
||||
}
|
||||
// unknown, aq opening?
|
||||
packet.AddState(2322, 0); // AQ_SANDWORM_N
|
||||
packet.AddState(2323, 0); // AQ_SANDWORM_S
|
||||
packet.AddState(2324, 0); // AQ_SANDWORM_SW
|
||||
packet.AddState(2325, 0); // AQ_SANDWORM_E
|
||||
break;
|
||||
// any of these needs change! the client remembers the prev setting!
|
||||
// ON EVERY ZONE LEAVE, RESET THE OLD ZONE'S WORLD STATE, BUT AT LEAST THE UI STUFF!
|
||||
case 3483: // Hellfire Peninsula
|
||||
if (pvp != null && pvp.GetTypeId() == OutdoorPvPTypes.HellfirePeninsula)
|
||||
pvp.FillInitialWorldStates(packet);
|
||||
else
|
||||
{
|
||||
packet.AddState(2490, 1); // add ally tower main gui icon
|
||||
packet.AddState(2489, 1); // add horde tower main gui icon
|
||||
packet.AddState(2485, 0); // show neutral broken hill icon
|
||||
packet.AddState(2484, 1); // show icon above broken hill
|
||||
packet.AddState(2483, 0); // show ally broken hill icon
|
||||
packet.AddState(2482, 0); // show neutral overlook icon
|
||||
packet.AddState(2481, 1); // show the overlook arrow
|
||||
packet.AddState(2480, 0); // show ally overlook icon
|
||||
packet.AddState(2478, 0); // horde pvp objectives captured
|
||||
packet.AddState(2476, 0); // ally pvp objectives captured
|
||||
packet.AddState(2475, 100); // horde slider grey area
|
||||
packet.AddState(2474, 50); // horde slider percentage, 100 for ally, 0 for horde
|
||||
packet.AddState(2473, 0); // horde slider display
|
||||
packet.AddState(2472, 0); // show the neutral stadium icon
|
||||
packet.AddState(2471, 0); // show the ally stadium icon
|
||||
packet.AddState(2470, 1); // show the horde stadium icon
|
||||
}
|
||||
break;
|
||||
case 3518: // Nagrand
|
||||
if (pvp != null && pvp.GetTypeId() == OutdoorPvPTypes.Nagrand)
|
||||
pvp.FillInitialWorldStates(packet);
|
||||
else
|
||||
{
|
||||
packet.AddState(2503, 0); // NA_UI_HORDE_GUARDS_SHOW
|
||||
packet.AddState(2502, 0); // NA_UI_ALLIANCE_GUARDS_SHOW
|
||||
packet.AddState(2493, 0); // NA_UI_GUARDS_MAX
|
||||
packet.AddState(2491, 0); // NA_UI_GUARDS_LEFT
|
||||
packet.AddState(2495, 0); // NA_UI_OUTLAND_01
|
||||
packet.AddState(2494, 0); // NA_UI_UNK_1
|
||||
packet.AddState(2497, 0); // NA_UI_UNK_2
|
||||
packet.AddState(2762, 0); // NA_MAP_WYVERN_NORTH_NEU_H
|
||||
packet.AddState(2662, 0); // NA_MAP_WYVERN_NORTH_NEU_A
|
||||
packet.AddState(2663, 0); // NA_MAP_WYVERN_NORTH_H
|
||||
packet.AddState(2664, 0); // NA_MAP_WYVERN_NORTH_A
|
||||
packet.AddState(2760, 0); // NA_MAP_WYVERN_SOUTH_NEU_H
|
||||
packet.AddState(2670, 0); // NA_MAP_WYVERN_SOUTH_NEU_A
|
||||
packet.AddState(2668, 0); // NA_MAP_WYVERN_SOUTH_H
|
||||
packet.AddState(2669, 0); // NA_MAP_WYVERN_SOUTH_A
|
||||
packet.AddState(2761, 0); // NA_MAP_WYVERN_WEST_NEU_H
|
||||
packet.AddState(2667, 0); // NA_MAP_WYVERN_WEST_NEU_A
|
||||
packet.AddState(2665, 0); // NA_MAP_WYVERN_WEST_H
|
||||
packet.AddState(2666, 0); // NA_MAP_WYVERN_WEST_A
|
||||
packet.AddState(2763, 0); // NA_MAP_WYVERN_EAST_NEU_H
|
||||
packet.AddState(2659, 0); // NA_MAP_WYVERN_EAST_NEU_A
|
||||
packet.AddState(2660, 0); // NA_MAP_WYVERN_EAST_H
|
||||
packet.AddState(2661, 0); // NA_MAP_WYVERN_EAST_A
|
||||
packet.AddState(2671, 0); // NA_MAP_HALAA_NEUTRAL
|
||||
packet.AddState(2676, 0); // NA_MAP_HALAA_NEU_A
|
||||
packet.AddState(2677, 0); // NA_MAP_HALAA_NEU_H
|
||||
packet.AddState(2672, 0); // NA_MAP_HALAA_HORDE
|
||||
packet.AddState(2673, 0); // NA_MAP_HALAA_ALLIANCE
|
||||
}
|
||||
break;
|
||||
case 3519: // Terokkar Forest
|
||||
if (pvp != null && pvp.GetTypeId() == OutdoorPvPTypes.TerokkarForest)
|
||||
pvp.FillInitialWorldStates(packet);
|
||||
else
|
||||
{
|
||||
packet.AddState(2625, 0); // TF_UI_CAPTURE_BAR_POS
|
||||
packet.AddState(2624, 20); // TF_UI_CAPTURE_BAR_NEUTRAL
|
||||
packet.AddState(2623, 0); // TF_UI_SHOW CAPTURE BAR
|
||||
packet.AddState(2622, 0); // TF_UI_TOWER_COUNT_H
|
||||
packet.AddState(2621, 5); // TF_UI_TOWER_COUNT_A
|
||||
packet.AddState(2620, 0); // TF_UI_TOWERS_CONTROLLED_DISPLAY
|
||||
packet.AddState(2696, 0); // TF_TOWER_NUM_15 - SE Neutral
|
||||
packet.AddState(2695, 0); // TF_TOWER_NUM_14 - SE Horde
|
||||
packet.AddState(2694, 0); // TF_TOWER_NUM_13 - SE Alliance
|
||||
packet.AddState(2693, 0); // TF_TOWER_NUM_12 - S Neutral
|
||||
packet.AddState(2692, 0); // TF_TOWER_NUM_11 - S Horde
|
||||
packet.AddState(2691, 0); // TF_TOWER_NUM_10 - S Alliance
|
||||
packet.AddState(2690, 0); // TF_TOWER_NUM_09 - NE Neutral
|
||||
packet.AddState(2689, 0); // TF_TOWER_NUM_08 - NE Horde
|
||||
packet.AddState(2688, 0); // TF_TOWER_NUM_07 - NE Alliance
|
||||
packet.AddState(2687, 0); // TF_TOWER_NUM_16 - unk
|
||||
packet.AddState(2686, 0); // TF_TOWER_NUM_06 - N Neutral
|
||||
packet.AddState(2685, 0); // TF_TOWER_NUM_05 - N Horde
|
||||
packet.AddState(2684, 0); // TF_TOWER_NUM_04 - N Alliance
|
||||
packet.AddState(2683, 0); // TF_TOWER_NUM_03 - NW Alliance
|
||||
packet.AddState(2682, 0); // TF_TOWER_NUM_02 - NW Horde
|
||||
packet.AddState(2681, 0); // TF_TOWER_NUM_01 - NW Neutral
|
||||
packet.AddState(2512, 5); // TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT
|
||||
packet.AddState(2510, 0); // TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT
|
||||
packet.AddState(2509, 0); // TF_UI_LOCKED_TIME_HOURS
|
||||
packet.AddState(2508, 0); // TF_UI_LOCKED_DISPLAY_NEUTRAL
|
||||
packet.AddState(2768, 0); // TF_UI_LOCKED_DISPLAY_HORDE
|
||||
packet.AddState(2767, 1); // TF_UI_LOCKED_DISPLAY_ALLIANCE
|
||||
}
|
||||
break;
|
||||
case 3521: // Zangarmarsh
|
||||
if (pvp != null && pvp.GetTypeId() == OutdoorPvPTypes.Zangarmarsh)
|
||||
pvp.FillInitialWorldStates(packet);
|
||||
else
|
||||
{
|
||||
packet.AddState(2529, 0); // ZM_UNK_1
|
||||
packet.AddState(2528, 0); // ZM_UNK_2
|
||||
packet.AddState(2527, 0); // ZM_UNK_3
|
||||
packet.AddState(2653, 1); // ZM_WORLDSTATE_UNK_1
|
||||
packet.AddState(2652, 0); // ZM_MAP_TOWER_EAST_N
|
||||
packet.AddState(2651, 1); // ZM_MAP_TOWER_EAST_H
|
||||
packet.AddState(2650, 0); // ZM_MAP_TOWER_EAST_A
|
||||
packet.AddState(2649, 1); // ZM_MAP_GRAVEYARD_H - Twin spire graveyard horde
|
||||
packet.AddState(2648, 0); // ZM_MAP_GRAVEYARD_A
|
||||
packet.AddState(2647, 0); // ZM_MAP_GRAVEYARD_N
|
||||
packet.AddState(2646, 0); // ZM_MAP_TOWER_WEST_N
|
||||
packet.AddState(2645, 1); // ZM_MAP_TOWER_WEST_H
|
||||
packet.AddState(2644, 0); // ZM_MAP_TOWER_WEST_A
|
||||
packet.AddState(2535, 0); // ZM_UNK_4
|
||||
packet.AddState(2534, 0); // ZM_UNK_5
|
||||
packet.AddState(2533, 0); // ZM_UNK_6
|
||||
packet.AddState(2560, 0); // ZM_UI_TOWER_EAST_N
|
||||
packet.AddState(2559, 1); // ZM_UI_TOWER_EAST_H
|
||||
packet.AddState(2558, 0); // ZM_UI_TOWER_EAST_A
|
||||
packet.AddState(2557, 0); // ZM_UI_TOWER_WEST_N
|
||||
packet.AddState(2556, 1); // ZM_UI_TOWER_WEST_H
|
||||
packet.AddState(2555, 0); // ZM_UI_TOWER_WEST_A
|
||||
packet.AddState(2658, 0); // ZM_MAP_HORDE_FLAG_READY
|
||||
packet.AddState(2657, 1); // ZM_MAP_HORDE_FLAG_NOT_READY
|
||||
packet.AddState(2656, 1); // ZM_MAP_ALLIANCE_FLAG_NOT_READY
|
||||
packet.AddState(2655, 0); // ZM_MAP_ALLIANCE_FLAG_READY
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
SendPacket(packet);
|
||||
SendBGWeekendWorldStates();
|
||||
}
|
||||
|
||||
@@ -73,20 +73,14 @@ namespace Game.PvP
|
||||
return objective_changed;
|
||||
}
|
||||
|
||||
public void SendUpdateWorldState(uint field, uint value)
|
||||
public int GetWorldState(int worldStateId)
|
||||
{
|
||||
if (m_sendUpdate)
|
||||
{
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
foreach (var guid in m_players[i])
|
||||
{
|
||||
Player player = Global.ObjAccessor.FindPlayer(guid);
|
||||
if (player)
|
||||
player.SendUpdateWorldState(field, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Global.WorldStateMgr.GetValue(worldStateId, m_map);
|
||||
}
|
||||
|
||||
public void SetWorldState(int worldStateId, int value)
|
||||
{
|
||||
Global.WorldStateMgr.SetValue(worldStateId, value, false, m_map);
|
||||
}
|
||||
|
||||
public virtual void HandleKill(Player killer, Unit killed)
|
||||
@@ -264,8 +258,6 @@ namespace Game.PvP
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void FillInitialWorldStates(InitWorldStates data) { }
|
||||
|
||||
// setup stuff
|
||||
public virtual bool SetupOutdoorPvP() { return true; }
|
||||
|
||||
@@ -672,8 +664,6 @@ namespace Game.PvP
|
||||
return -1;
|
||||
}
|
||||
|
||||
public virtual void FillInitialWorldStates(InitWorldStates data) { }
|
||||
|
||||
public virtual void ChangeState() { }
|
||||
|
||||
public virtual void ChangeTeam(uint oldTeam) { }
|
||||
|
||||
@@ -92,36 +92,31 @@ namespace Game.PvP
|
||||
TeamCastSpell(TeamId.Alliance, -(int)OutdoorPvPHPSpells.AllianceBuff);
|
||||
TeamCastSpell(TeamId.Horde, -(int)OutdoorPvPHPSpells.HordeBuff);
|
||||
}
|
||||
SendUpdateWorldState(OutdoorPvPHPWorldStates.Count_A, m_AllianceTowersControlled);
|
||||
SendUpdateWorldState(OutdoorPvPHPWorldStates.Count_H, m_HordeTowersControlled);
|
||||
SetWorldState(OutdoorPvPHPWorldStates.Count_A, (int)m_AllianceTowersControlled);
|
||||
SetWorldState(OutdoorPvPHPWorldStates.Count_H, (int)m_HordeTowersControlled);
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
public override void SendRemoveWorldStates(Player player)
|
||||
{
|
||||
player.SendUpdateWorldState(OutdoorPvPHPWorldStates.Display_A, 0);
|
||||
player.SendUpdateWorldState(OutdoorPvPHPWorldStates.Display_H, 0);
|
||||
player.SendUpdateWorldState(OutdoorPvPHPWorldStates.Count_H, 0);
|
||||
player.SendUpdateWorldState(OutdoorPvPHPWorldStates.Count_A, 0);
|
||||
InitWorldStates initWorldStates = new();
|
||||
initWorldStates.MapID = player.GetMapId();
|
||||
initWorldStates.AreaID = player.GetZoneId();
|
||||
initWorldStates.SubareaID = player.GetAreaId();
|
||||
initWorldStates.AddState(OutdoorPvPHPWorldStates.Display_A, 0);
|
||||
initWorldStates.AddState(OutdoorPvPHPWorldStates.Display_H, 0);
|
||||
initWorldStates.AddState(OutdoorPvPHPWorldStates.Count_H, 0);
|
||||
initWorldStates.AddState(OutdoorPvPHPWorldStates.Count_A, 0);
|
||||
|
||||
for (int i = 0; i < (int)OutdoorPvPHPTowerType.Num; ++i)
|
||||
{
|
||||
player.SendUpdateWorldState(HPConst.Map_N[i], 0);
|
||||
player.SendUpdateWorldState(HPConst.Map_A[i], 0);
|
||||
player.SendUpdateWorldState(HPConst.Map_H[i], 0);
|
||||
initWorldStates.AddState(HPConst.Map_N[i], 0);
|
||||
initWorldStates.AddState(HPConst.Map_A[i], 0);
|
||||
initWorldStates.AddState(HPConst.Map_H[i], 0);
|
||||
}
|
||||
}
|
||||
|
||||
public override void FillInitialWorldStates(InitWorldStates packet)
|
||||
{
|
||||
packet.AddState(OutdoorPvPHPWorldStates.Display_A, 1);
|
||||
packet.AddState(OutdoorPvPHPWorldStates.Display_H, 1);
|
||||
packet.AddState(OutdoorPvPHPWorldStates.Count_A, m_AllianceTowersControlled);
|
||||
packet.AddState(OutdoorPvPHPWorldStates.Count_H, m_HordeTowersControlled);
|
||||
|
||||
foreach (var capture in m_capturePoints.Values)
|
||||
capture.FillInitialWorldStates(packet);
|
||||
player.SendPacket(initWorldStates);
|
||||
}
|
||||
|
||||
public override void HandleKillImpl(Player killer, Unit killed)
|
||||
@@ -207,7 +202,7 @@ namespace Game.PvP
|
||||
// send world state update
|
||||
if (field != 0)
|
||||
{
|
||||
PvP.SendUpdateWorldState(field, 0);
|
||||
PvP.SetWorldState((int)field, 0);
|
||||
field = 0;
|
||||
}
|
||||
uint artkit = 21;
|
||||
@@ -268,40 +263,13 @@ namespace Game.PvP
|
||||
|
||||
// send world state update
|
||||
if (field != 0)
|
||||
PvP.SendUpdateWorldState(field, 1);
|
||||
PvP.SetWorldState((int)field, 1);
|
||||
|
||||
// complete quest objective
|
||||
if (State == ObjectiveStates.Alliance || State == ObjectiveStates.Horde)
|
||||
SendObjectiveComplete(HPConst.CreditMarker[m_TowerType], ObjectGuid.Empty);
|
||||
}
|
||||
|
||||
public override void FillInitialWorldStates(InitWorldStates packet)
|
||||
{
|
||||
switch (State)
|
||||
{
|
||||
case ObjectiveStates.Alliance:
|
||||
case ObjectiveStates.AllianceHordeChallenge:
|
||||
packet.AddState(HPConst.Map_N[m_TowerType], 0);
|
||||
packet.AddState(HPConst.Map_A[m_TowerType], 1);
|
||||
packet.AddState(HPConst.Map_H[m_TowerType], 0);
|
||||
break;
|
||||
case ObjectiveStates.Horde:
|
||||
case ObjectiveStates.HordeAllianceChallenge:
|
||||
packet.AddState(HPConst.Map_N[m_TowerType], 0);
|
||||
packet.AddState(HPConst.Map_A[m_TowerType], 0);
|
||||
packet.AddState(HPConst.Map_H[m_TowerType], 1);
|
||||
break;
|
||||
case ObjectiveStates.Neutral:
|
||||
case ObjectiveStates.NeutralAllianceChallenge:
|
||||
case ObjectiveStates.NeutralHordeChallenge:
|
||||
default:
|
||||
packet.AddState(HPConst.Map_N[m_TowerType], 1);
|
||||
packet.AddState(HPConst.Map_A[m_TowerType], 0);
|
||||
packet.AddState(HPConst.Map_H[m_TowerType], 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint m_TowerType;
|
||||
}
|
||||
|
||||
@@ -322,11 +290,11 @@ namespace Game.PvP
|
||||
|
||||
public static uint[] LangCapture_H = { DefenseMessages.BrokenHillTakenHorde, DefenseMessages.OverlookTakenHorde, DefenseMessages.StadiumTakenHorde };
|
||||
|
||||
public static uint[] Map_N = { 0x9b5, 0x9b2, 0x9a8 };
|
||||
public static uint[] Map_N = { 2485, 2482, 0x9a8 };
|
||||
|
||||
public static uint[] Map_A = { 0x9b3, 0x9b0, 0x9a7 };
|
||||
public static uint[] Map_A = { 2483, 2480, 2471 };
|
||||
|
||||
public static uint[] Map_H = { 0x9b4, 0x9b1, 0x9a6 };
|
||||
public static uint[] Map_H = { 2484, 2481, 2470 };
|
||||
|
||||
public static uint[] TowerArtKit_A = { 65, 62, 67 };
|
||||
|
||||
@@ -386,10 +354,10 @@ namespace Game.PvP
|
||||
|
||||
struct OutdoorPvPHPWorldStates
|
||||
{
|
||||
public const uint Display_A = 0x9ba;
|
||||
public const uint Display_H = 0x9b9;
|
||||
public const int Display_A = 0x9ba;
|
||||
public const int Display_H = 0x9b9;
|
||||
|
||||
public const uint Count_H = 0x9ae;
|
||||
public const uint Count_A = 0x9ac;
|
||||
public const int Count_H = 0x9ae;
|
||||
public const int Count_A = 0x9ac;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user