Core/Entities: Phasing rewrite

This commit is contained in:
hondacrx
2018-03-28 11:09:30 -04:00
parent caad52f636
commit fa35d60f60
72 changed files with 2254 additions and 1146 deletions
+57 -27
View File
@@ -743,43 +743,38 @@ namespace Game.Network.Packets
public override void Write() { }
}
public class PhaseShift : ServerPacket
class PhaseShiftChange : ServerPacket
{
public PhaseShift() : base(ServerOpcodes.PhaseShiftChange, ConnectionType.Instance) { }
public PhaseShiftChange() : base(ServerOpcodes.PhaseShiftChange) { }
public override void Write()
{
_worldPacket.WritePackedGuid(ClientGUID);
_worldPacket.WriteUInt32(!PhaseShifts.Empty() ? 0 : 8); // PhaseShiftFlags
_worldPacket.WriteUInt32(PhaseShifts.Count);
_worldPacket.WritePackedGuid(PersonalGUID);
foreach (uint phase in PhaseShifts)
{
_worldPacket.WriteUInt16(1); // PhaseFlags
_worldPacket.WriteUInt16(phase); // PhaseID
}
_worldPacket.WritePackedGuid(Client);
Phaseshift.Write(_worldPacket);
_worldPacket.WriteUInt32(VisibleMapIDs.Count * 2); // size in bytes
foreach (ushort visibleMapId in VisibleMapIDs)
_worldPacket.WriteUInt16(visibleMapId); // Active terrain swap map id
_worldPacket.WriteUInt32(VisibleMapIDs.Count * 2);
foreach (uint map in VisibleMapIDs)
_worldPacket.WriteUInt16(map); // Active terrain swap map id
_worldPacket.WriteUInt32(PreloadMapIDs.Count * 2); // size in bytes
foreach (ushort preloadMapId in PreloadMapIDs)
_worldPacket.WriteUInt16(preloadMapId); // Inactive terrain swap map id
_worldPacket.WriteUInt32(PreloadMapIDs.Count * 2);
foreach (uint map in PreloadMapIDs)
_worldPacket.WriteUInt16(map); // Inactive terrain swap map id
_worldPacket.WriteUInt32(UiWorldMapAreaIDSwaps.Count * 2);
foreach (uint map in UiWorldMapAreaIDSwaps)
_worldPacket.WriteUInt16(map); // UI map id, WorldMapArea.dbc, controls map display
_worldPacket.WriteUInt32(UiWorldMapAreaIDSwaps.Count * 2); // size in bytes
foreach (ushort uiWorldMapAreaIDSwap in UiWorldMapAreaIDSwaps)
_worldPacket.WriteUInt16(uiWorldMapAreaIDSwap); // UI map id, WorldMapArea.db2, controls map display
}
public ObjectGuid ClientGUID;
public ObjectGuid PersonalGUID;
public List<uint> PhaseShifts = new List<uint>();
public List<uint> PreloadMapIDs = new List<uint>();
public List<uint> UiWorldMapAreaIDSwaps = new List<uint>();
public List<uint> VisibleMapIDs = new List<uint>();
public ObjectGuid Client;
public PhaseShiftData Phaseshift = new PhaseShiftData();
public List<ushort> PreloadMapIDs = new List<ushort>();
public List<ushort> UiWorldMapAreaIDSwaps = new List<ushort>();
public List<ushort> VisibleMapIDs = new List<ushort>();
}
public class ZoneUnderAttack : ServerPacket
{
public ZoneUnderAttack() : base(ServerOpcodes.ZoneUnderAttack, ConnectionType.Instance) { }
@@ -1299,4 +1294,39 @@ namespace Game.Network.Packets
public ObjectGuid SourceGuid;
}
//Structs
struct PhaseShiftDataPhase
{
public PhaseShiftDataPhase(uint phaseFlags, uint id)
{
PhaseFlags = (ushort)phaseFlags;
Id = (ushort)id;
}
public void Write(WorldPacket data)
{
data.WriteUInt16(PhaseFlags);
data.WriteUInt16(Id);
}
public ushort PhaseFlags;
public ushort Id;
}
class PhaseShiftData
{
public void Write(WorldPacket data)
{
data.WriteUInt32(PhaseShiftFlags);
data.WriteUInt32(Phases.Count);
data.WritePackedGuid(PersonalGUID);
foreach (PhaseShiftDataPhase phaseShiftDataPhase in Phases)
phaseShiftDataPhase.Write(data);
}
public uint PhaseShiftFlags;
public List<PhaseShiftDataPhase> Phases = new List<PhaseShiftDataPhase>();
public ObjectGuid PersonalGUID;
}
}
+9 -12
View File
@@ -313,16 +313,7 @@ namespace Game.Network.Packets
}
// Phases
var phases = player.GetPhases();
MemberStats.Phases.PhaseShiftFlags = 0x08 | (!phases.Empty() ? 0x10 : 0);
MemberStats.Phases.PersonalGUID = ObjectGuid.Empty;
foreach (uint phaseId in phases)
{
PartyMemberPhase phase;
phase.Id = (ushort)phaseId;
phase.Flags = 1;
MemberStats.Phases.List.Add(phase);
}
PhasingHandler.FillPartyMemberPhase(MemberStats.Phases, player.GetPhaseShift());
// Pet
if (player.GetPet())
@@ -892,8 +883,14 @@ namespace Game.Network.Packets
}
//Structs
struct PartyMemberPhase
public struct PartyMemberPhase
{
public PartyMemberPhase(uint flags, uint id)
{
Flags = (ushort)flags;
Id = (ushort)id;
}
public void Write(WorldPacket data)
{
data.WriteUInt16(Flags);
@@ -904,7 +901,7 @@ namespace Game.Network.Packets
public ushort Id;
}
class PartyMemberPhaseStates
public class PartyMemberPhaseStates
{
public void Write(WorldPacket data)
{