From a6a06de9944383e1f986de4b39816f72d6f64a75 Mon Sep 17 00:00:00 2001 From: KimLS Date: Sun, 17 Jan 2016 17:40:29 -0800 Subject: [PATCH] Changes to UF and above clients on how spell buff tics are synced. --- common/eq_packet_structs.h | 1 + common/patches/rof.cpp | 2 +- common/patches/rof2.cpp | 2 +- common/patches/sod.cpp | 19 ------------------- common/patches/uf.cpp | 2 +- zone/spells.cpp | 2 ++ 6 files changed, 6 insertions(+), 22 deletions(-) diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index 74eb9536e..cd24118f8 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -4796,6 +4796,7 @@ struct BuffIcon_Struct uint8 all_buffs; uint16 count; uint8 type; // 0 = self buff window, 1 = self target window, 4 = group, 5 = PC, 7 = NPC + int32 tic_timer; BuffIconEntry_Struct entries[0]; }; diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index 988eba916..88a77747f 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -435,7 +435,7 @@ namespace RoF memset(__packet->pBuffer, 0, sz); __packet->WriteUInt32(emu->entity_id); - __packet->WriteUInt32(0); // PlayerID ? + __packet->WriteUInt32(emu->tic_timer); __packet->WriteUInt8(emu->all_buffs); // 1 indicates all buffs on the player (0 to add or remove a single buff) __packet->WriteUInt16(emu->count); diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index e0e8f307f..ae50cca73 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -501,7 +501,7 @@ namespace RoF2 memset(__packet->pBuffer, 0, sz); __packet->WriteUInt32(emu->entity_id); - __packet->WriteUInt32(0); // PlayerID ? + __packet->WriteUInt32(emu->tic_timer); __packet->WriteUInt8(emu->all_buffs); // 1 indicates all buffs on the player (0 to add or remove a single buff) __packet->WriteUInt16(emu->count); diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index bbd5acd45..2d6241201 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -2207,25 +2207,6 @@ namespace SoD ptr += sizeof(uint32); ptr += 1; } - /*std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary); - - uint8 write_var8 = 1; - ss.write((const char*)&emu->entity_id, sizeof(uint32)); - ss.write((const char*)&emu->count, sizeof(uint16)); - write_var8 = 0; - for(uint16 i = 0; i < emu->count; ++i) - { - ss.write((const char*)&emu->entries[i].buff_slot, sizeof(uint32)); - ss.write((const char*)&emu->entries[i].spell_id, sizeof(uint32)); - ss.write((const char*)&emu->entries[i].tics_remaining, sizeof(uint32)); - ss.write((const char*)&write_var8, sizeof(uint8)); - } - - __packet->size = ss.str().length(); - __packet->pBuffer = new unsigned char[__packet->size]; - memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size); - */ - FINISH_ENCODE(); } diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index 0efa502c0..cef78bdcc 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -365,7 +365,7 @@ namespace UF memset(__packet->pBuffer, 0, sz); __packet->WriteUInt32(emu->entity_id); - __packet->WriteUInt32(0); + __packet->WriteUInt32(emu->tic_timer); __packet->WriteUInt8(emu->all_buffs); // 1 = all buffs, 0 = 1 buff __packet->WriteUInt16(emu->count); diff --git a/zone/spells.cpp b/zone/spells.cpp index b8c3023b8..b2c1226f6 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -5399,6 +5399,7 @@ void Client::SendBuffNumHitPacket(Buffs_Struct &buff, int slot) bi->entity_id = GetID(); bi->count = 1; bi->all_buffs = 0; + bi->tic_timer = tic_timer.GetRemainingTime(); bi->entries[0].buff_slot = slot; bi->entries[0].spell_id = buff.spellid; @@ -5479,6 +5480,7 @@ EQApplicationPacket *Mob::MakeBuffsPacket(bool for_target) buff->entity_id = GetID(); buff->count = count; buff->all_buffs = 1; + buff->tic_timer = tic_timer.GetRemainingTime(); // there are more types, the client doesn't seem to really care though. The others are also currently hard to fill in here ... // (see comment in common/eq_packet_structs.h) if (for_target)