Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/cypher_proxy' into cypher_proxy
Browse files Browse the repository at this point in the history
  • Loading branch information
actions-user committed May 18, 2022
2 parents 26db415 + ced668f commit 8c7bbd0
Show file tree
Hide file tree
Showing 11 changed files with 491 additions and 9,645 deletions.
3,641 changes: 0 additions & 3,641 deletions HermesProxy/CSV/ItemEffects1.csv

This file was deleted.

5,967 changes: 0 additions & 5,967 deletions HermesProxy/CSV/ItemEffects2.csv

This file was deleted.

1 change: 1 addition & 0 deletions HermesProxy/GlobalSessionData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,7 @@ public class ClientCastRequest
public long Timestamp;
public WowGuid128 ClientGUID;
public WowGuid128 ServerGUID;
public WowGuid128 ItemGUID;
}
public class ArenaTeamData
{
Expand Down
18 changes: 17 additions & 1 deletion HermesProxy/World/Client/PacketHandlers/ItemHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ void HandleItemPushResult(WorldPacket packet)
for (int i = 0; i < questsCount; i++)
{
QuestLog logEntry = ReadQuestLogEntry(i, null, updateFields);
if (logEntry == null)
if (logEntry == null || logEntry.QuestID == null)
continue;
if (logEntry.QuestID != objective.QuestID)
continue;
Expand Down Expand Up @@ -131,6 +131,14 @@ void HandleInventoryChangeFailureVanilla(WorldPacket packet)
failure.ContainerBSlot = packet.ReadUInt8();

SendPacketToClient(failure);

if (GetSession().GameState.CurrentClientNormalCast != null &&
!GetSession().GameState.CurrentClientNormalCast.HasStarted &&
GetSession().GameState.CurrentClientNormalCast.ItemGUID == failure.Item[0])
{
GetSession().InstanceSocket.SendCastRequestFailed(GetSession().GameState.CurrentClientNormalCast, false);
GetSession().GameState.CurrentClientNormalCast = null;
}
}
[PacketHandler(Opcode.SMSG_INVENTORY_CHANGE_FAILURE, ClientVersionBuild.V2_0_1_6180)]
void HandleInventoryChangeFailure(WorldPacket packet)
Expand Down Expand Up @@ -162,6 +170,14 @@ void HandleInventoryChangeFailure(WorldPacket packet)
break;
}
SendPacketToClient(failure);

if (GetSession().GameState.CurrentClientNormalCast != null &&
!GetSession().GameState.CurrentClientNormalCast.HasStarted &&
GetSession().GameState.CurrentClientNormalCast.ItemGUID == failure.Item[0])
{
GetSession().InstanceSocket.SendCastRequestFailed(GetSession().GameState.CurrentClientNormalCast, false);
GetSession().GameState.CurrentClientNormalCast = null;
}
}
[PacketHandler(Opcode.SMSG_DURABILITY_DAMAGE_DEATH)]
void HandleDurabilityDamageDeath(WorldPacket packet)
Expand Down
184 changes: 183 additions & 1 deletion HermesProxy/World/Client/PacketHandlers/QueryHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ void HandleQueryQuestInfoResponse(WorldPacket packet)
choiceItem.ItemID = packet.ReadUInt32();
choiceItem.Quantity = packet.ReadUInt32();

ItemTemplate item = GameData.GetItemTemplate(choiceItem.ItemID);
ItemDisplayData item = GameData.GetItemDisplayData(choiceItem.ItemID);
if (item != null)
choiceItem.DisplayID = item.DisplayId;

Expand Down Expand Up @@ -454,6 +454,188 @@ void HandleQueryNpcTextResponse(WorldPacket packet)

SendPacketToClient(response);
}
[PacketHandler(Opcode.SMSG_ITEM_QUERY_SINGLE_RESPONSE)]
void HandleItemQueryResponse(WorldPacket packet)
{
var entry = packet.ReadEntry();
if (entry.Value)
return;

ItemTemplate item = new ItemTemplate
{
Entry = (uint)entry.Key,
Class = packet.ReadInt32(),
SubClass = packet.ReadUInt32()
};

if (LegacyVersion.AddedInVersion(ClientVersionBuild.V2_0_3_6299))
item.SoundOverrideSubclass = packet.ReadInt32();

for (int i = 0; i < 4; i++)
item.Name[i] = packet.ReadCString();

item.DisplayID = packet.ReadUInt32();

item.Quality = packet.ReadInt32();

item.Flags = packet.ReadUInt32();

if (LegacyVersion.AddedInVersion(ClientVersionBuild.V3_2_0_10192))
item.FlagsExtra = packet.ReadUInt32();

item.BuyPrice = packet.ReadUInt32();

item.SellPrice = packet.ReadUInt32();

item.InventoryType = packet.ReadInt32();

item.AllowedClasses = packet.ReadUInt32();

item.AllowedRaces = packet.ReadUInt32();

item.ItemLevel = packet.ReadUInt32();

item.RequiredLevel = packet.ReadUInt32();

item.RequiredSkillId = packet.ReadUInt32();

item.RequiredSkillLevel = packet.ReadUInt32();

item.RequiredSpell = packet.ReadUInt32();

item.RequiredHonorRank = packet.ReadUInt32();

item.RequiredCityRank = packet.ReadUInt32();

item.RequiredRepFaction = packet.ReadUInt32();

item.RequiredRepValue = packet.ReadUInt32();

item.MaxCount = packet.ReadInt32();

item.MaxStackSize = packet.ReadInt32();

item.ContainerSlots = packet.ReadUInt32();

item.StatsCount = LegacyVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056) ? packet.ReadUInt32() : 10;
if (item.StatsCount > 10)
{
item.StatTypes = new int[item.StatsCount];
item.StatValues = new int[item.StatsCount];
}
for (int i = 0; i < item.StatsCount; i++)
{
item.StatTypes[i] = packet.ReadInt32();
item.StatValues[i] = packet.ReadInt32();
}

if (LegacyVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056))
{
item.ScalingStatDistribution = packet.ReadInt32();
item.ScalingStatValue = packet.ReadUInt32();
}

int dmgCount = LegacyVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767) ? 2 : 5;
for (int i = 0; i < dmgCount; i++)
{
item.DamageMins[i] = packet.ReadFloat();
item.DamageMaxs[i] = packet.ReadFloat();
item.DamageTypes[i] = packet.ReadInt32();
}

item.Armor = packet.ReadUInt32();
item.HolyResistance = packet.ReadUInt32();
item.FireResistance = packet.ReadUInt32();
item.NatureResistance = packet.ReadUInt32();
item.FrostResistance = packet.ReadUInt32();
item.ShadowResistance = packet.ReadUInt32();
item.ArcaneResistance = packet.ReadUInt32();

item.Delay = packet.ReadUInt32();

item.AmmoType = packet.ReadInt32();

item.RangedMod = packet.ReadFloat();

for (byte i = 0; i < 5; i++)
{
item.TriggeredSpellIds[i] = packet.ReadInt32();
item.TriggeredSpellTypes[i] = packet.ReadInt32();
item.TriggeredSpellCharges[i] = packet.ReadInt32();
item.TriggeredSpellCooldowns[i] = packet.ReadInt32();
item.TriggeredSpellCategories[i] = packet.ReadUInt32();
item.TriggeredSpellCategoryCooldowns[i] = packet.ReadInt32();

if (item.TriggeredSpellIds[i] != 0)
GameData.SaveItemEffectSlot(item.Entry, (uint)item.TriggeredSpellIds[i], i);
}

item.Bonding = packet.ReadInt32();

item.Description = packet.ReadCString();

item.PageText = packet.ReadUInt32();

item.Language = packet.ReadInt32();

item.PageMaterial = packet.ReadInt32();

item.StartQuestId = packet.ReadUInt32();

item.LockId = packet.ReadUInt32();

item.Material = packet.ReadInt32();

item.SheathType = packet.ReadInt32();

item.RandomProperty = packet.ReadInt32();

if (LegacyVersion.AddedInVersion(ClientVersionBuild.V2_0_1_6180))
item.RandomSuffix = packet.ReadUInt32();

item.Block = packet.ReadUInt32();

item.ItemSet = packet.ReadUInt32();

item.MaxDurability = packet.ReadUInt32();

item.AreaID = packet.ReadUInt32();

// In this single (?) case, map 0 means no map
item.MapID = packet.ReadInt32();

item.BagFamily = packet.ReadUInt32();

if (LegacyVersion.AddedInVersion(ClientVersionBuild.V2_0_1_6180))
{
item.TotemCategory = packet.ReadInt32();

for (int i = 0; i < 3; i++)
{
item.ItemSocketColors[i] = packet.ReadInt32();
item.SocketContent[i] = packet.ReadUInt32();
}

item.SocketBonus = packet.ReadInt32();

item.GemProperties = packet.ReadInt32();

item.RequiredDisenchantSkill = packet.ReadInt32();

item.ArmorDamageModifier = packet.ReadFloat();
}

if (LegacyVersion.AddedInVersion(ClientVersionBuild.V2_4_2_8209))
item.Duration = packet.ReadUInt32();

if (LegacyVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056))
item.ItemLimitCategory = packet.ReadInt32();

if (LegacyVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767))
item.HolidayID = packet.ReadInt32();

GameData.StoreItemTemplate((uint)entry.Key, item);
}
[PacketHandler(Opcode.SMSG_QUERY_PET_NAME_RESPONSE)]
void HandleQueryPetNameResponse(WorldPacket packet)
{
Expand Down
22 changes: 22 additions & 0 deletions HermesProxy/World/Client/PacketHandlers/UpdateHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ void HandleUpdateObject(WorldPacket packet)
if (LegacyVersion.RemovedInVersion(ClientVersionBuild.V3_0_2_9056))
packet.ReadBool(); // Has Transport

HashSet<uint> missingItemTemplates = new HashSet<uint>();
List<AuraUpdate> auraUpdates = new List<AuraUpdate>();
UpdateObject updateObject = new UpdateObject(GetSession().GameState);

Expand Down Expand Up @@ -113,6 +114,12 @@ void HandleUpdateObject(WorldPacket packet)
AuraUpdate auraUpdate = new AuraUpdate(guid, true);
ReadCreateObjectBlock(packet, guid, updateData, auraUpdate, i);

if (guid.IsItem() && updateData.ObjectData.EntryID != null &&
!GameData.ItemTemplates.ContainsKey((uint)updateData.ObjectData.EntryID))
{
missingItemTemplates.Add((uint)updateData.ObjectData.EntryID);
}

if (updateData.CreateData.MoveInfo != null || !guid.IsWorldObject() )
{
updateObject.ObjectUpdates.Add(updateData);
Expand All @@ -139,6 +146,12 @@ void HandleUpdateObject(WorldPacket packet)
AuraUpdate auraUpdate = new AuraUpdate(guid, true);
ReadCreateObjectBlock(packet, guid, updateData, auraUpdate, i);

if (guid.IsItem() && updateData.ObjectData.EntryID != null &&
!GameData.ItemTemplates.ContainsKey((uint)updateData.ObjectData.EntryID))
{
missingItemTemplates.Add((uint)updateData.ObjectData.EntryID);
}

if (updateData.CreateData.MoveInfo != null || !guid.IsWorldObject())
{
updateObject.ObjectUpdates.Add(updateData);
Expand Down Expand Up @@ -167,6 +180,15 @@ void HandleUpdateObject(WorldPacket packet)
GetSession().GameState.IsWaitingForNewWorld)
return;

foreach (uint itemId in missingItemTemplates)
{
WorldPacket packet2 = new WorldPacket(Opcode.CMSG_ITEM_QUERY_SINGLE);
packet2.WriteUInt32(itemId);
if (LegacyVersion.RemovedInVersion(ClientVersionBuild.V2_0_1_6180))
packet2.WriteGuid(WowGuid64.Empty);
SendPacketToServer(packet2);
}

int activePlayerUpdateIndex = -1;
for (int i = 0; i < updateObject.ObjectUpdates.Count; i++)
{
Expand Down
Loading

0 comments on commit 8c7bbd0

Please sign in to comment.