diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 3c98ae7f..c6fdac98 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -131,7 +131,7 @@ namespace Sapphire::Network::Packets ActorCast = 0x017C, // updated 4.5 PartyList = 0x017E, // updated 4.5 - + HateRank = 0x017F, // updated 4.5 HateList = 0x0180, // updated 4.5 ObjectSpawn = 0x0181, // updated 4.5 ObjectDespawn = 0x0182, // updated 4.5 diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 924b0912..80588a04 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -719,6 +719,17 @@ namespace Sapphire::Network::Packets::Server uint32_t padding; }; + struct FFXIVIpcHateRank : FFXIVIpcBasePacket< HateRank > + { + uint32_t numEntries; + struct + { + uint32_t actorId; + uint32_t hateAmount; + } entry[32]; + uint32_t padding; + }; + struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket< UpdateClassInfo > { uint8_t classId; diff --git a/src/world/Actor/BNpc.cpp b/src/world/Actor/BNpc.cpp index 841ff2b9..03e143c9 100644 --- a/src/world/Actor/BNpc.cpp +++ b/src/world/Actor/BNpc.cpp @@ -689,6 +689,7 @@ void Sapphire::Entity::BNpc::autoAttack( CharaPtr pTarget ) effectEntry.value = damage; effectEntry.effectType = ActionEffectType::Damage; effectEntry.hitSeverity = ActionHitSeverityType::NormalDamage; + effectEntry.param = 0x71; effectPacket->addEffect( effectEntry ); sendToInRangeSet( effectPacket ); diff --git a/src/world/Actor/Chara.cpp b/src/world/Actor/Chara.cpp index b4e9303d..3da8d362 100644 --- a/src/world/Actor/Chara.cpp +++ b/src/world/Actor/Chara.cpp @@ -436,6 +436,7 @@ void Sapphire::Entity::Chara::autoAttack( CharaPtr pTarget ) effectEntry.value = damage; effectEntry.effectType = ActionEffectType::Damage; effectEntry.hitSeverity = ActionHitSeverityType::NormalDamage; + effectEntry.param = 0x71; effectPacket->addEffect( effectEntry ); sendToInRangeSet( effectPacket ); diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index f6d32053..925f7e11 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -1411,12 +1411,19 @@ void Sapphire::Entity::Player::sendHateList() { auto hateListPacket = makeZonePacket< FFXIVIpcHateList >( getId() ); hateListPacket->data().numEntries = m_actorIdTohateSlotMap.size(); + auto hateRankPacket = makeZonePacket< FFXIVIpcHateRank >( getId() ); + hateRankPacket->data().numEntries = m_actorIdTohateSlotMap.size(); auto it = m_actorIdTohateSlotMap.begin(); for( int32_t i = 0; it != m_actorIdTohateSlotMap.end(); ++it, i++ ) { + // TODO: get actual hate values for these hateListPacket->data().entry[ i ].actorId = it->first; hateListPacket->data().entry[ i ].hatePercent = 100; + + hateRankPacket->data().entry[ i ].actorId = it->first; + hateRankPacket->data().entry[ i ].hateAmount = 1; } + queuePacket( hateRankPacket ); queuePacket( hateListPacket ); } @@ -1571,7 +1578,7 @@ void Sapphire::Entity::Player::autoAttack( CharaPtr pTarget ) entry.value = damage; entry.effectType = Common::ActionEffectType::Damage; entry.hitSeverity = Common::ActionHitSeverityType::NormalDamage; - entry.param = variation; + entry.param = 0x72; effectPacket->addEffect( entry ); @@ -1586,6 +1593,7 @@ void Sapphire::Entity::Player::autoAttack( CharaPtr pTarget ) entry.value = damage; entry.effectType = Common::ActionEffectType::Damage; entry.hitSeverity = Common::ActionHitSeverityType::NormalDamage; + entry.param = 0x73; effectPacket->addEffect( entry );