diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 6649feb8..c4e4897f 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -349,14 +349,19 @@ namespace Sapphire::Network::Packets::Server uint32_t max_hp; uint16_t max_mp; uint16_t max_something; - uint8_t effect_index; // which position do i display this - uint8_t unknown3; - uint16_t effect_id; - uint16_t param; - uint16_t unknown5; // Sort this out (old right half of power/param property) - float duration; - uint32_t actor_id1; - uint8_t unknown4[52]; + + struct StatusEntry + { + uint8_t index; // which position do i display this + uint8_t unknown3; + uint16_t id; + uint16_t param; + uint16_t unknown5; // Sort this out (old right half of power/param property) + float duration; + uint32_t sourceActorId; + } statusEntries[4]; + + uint32_t unknown4; }; /** diff --git a/src/world/Actor/Chara.cpp b/src/world/Actor/Chara.cpp index c3a09a0c..15e75ae2 100644 --- a/src/world/Actor/Chara.cpp +++ b/src/world/Actor/Chara.cpp @@ -460,18 +460,21 @@ void Sapphire::Entity::Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEf auto statusEffectAdd = makeZonePacket< FFXIVIpcEffectResult >( getId() ); statusEffectAdd->data().actor_id = pEffect->getTargetActorId(); - statusEffectAdd->data().actor_id1 = pEffect->getSrcActorId(); statusEffectAdd->data().current_hp = getHp(); statusEffectAdd->data().current_mp = getMp(); statusEffectAdd->data().current_tp = getTp(); - statusEffectAdd->data().duration = static_cast< float >( pEffect->getDuration() ) / 1000; - statusEffectAdd->data().effect_id = pEffect->getId(); - statusEffectAdd->data().effect_index = nextSlot; statusEffectAdd->data().max_hp = getMaxHp(); statusEffectAdd->data().max_mp = getMaxMp(); statusEffectAdd->data().max_something = 1; //statusEffectAdd->data().unknown2 = 28; - statusEffectAdd->data().param = pEffect->getParam(); + + auto& status = statusEffectAdd->data().statusEntries[0]; + + status.sourceActorId = pEffect->getSrcActorId(); + status.duration = static_cast< float >( pEffect->getDuration() ) / 1000; + status.id = pEffect->getId(); + status.index = nextSlot; + status.param = pEffect->getParam(); sendToInRangeSet( statusEffectAdd, isPlayer() ); }