1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-25 02:57:45 +00:00

Update PacketHandlers.cpp

This commit is contained in:
Skyliegirl33 2021-09-16 19:00:52 +00:00 committed by GitHub
parent 55beb4f6ab
commit 9622ba7229
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -931,121 +931,3 @@ void Sapphire::Network::GameConnection::diveHandler( const Packets::FFXIVARR_PAC
setPos->data().unknown1 = 0;
player.queuePacket( setPos ); // need delay, same as above.
}
// Also used for gearsets
void Sapphire::Network::GameConnection::inventoryEquipRecommendedItemsHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
{
const auto packet = ZoneChannelPacket< Client::FFXIVInventoryEquipRecommendedItemsHandler >( inPacket );
const auto sequence = player.getNextInventorySequence();
// Loop over all swapped pieces
for (int slot = 0; slot < 14; slot++ )
{
const auto fromSlot = packet.data().containerIndex[ slot ];
const auto fromContainer = packet.data().storageId[ slot ];
player.sendDebug( "Container: {} ", fromContainer );
player.sendDebug( "Slot: {} ", fromSlot );
const auto fromItem = fromSlot == -1 ? nullptr : player.getItemAt( fromContainer, fromSlot );
const auto equippedItem = player.getItemAt( Common::GearSet0, slot );
if ( fromItem )
{
auto slotUpdate = std::make_shared< UpdateInventorySlotPacket >( player.getId(), fromSlot, fromContainer, *fromItem, slot );
player.queuePacket( slotUpdate );
}
if ( equippedItem )
{
auto slotUpdate2 = std::make_shared< UpdateInventorySlotPacket >( player.getId(), slot, Common::GearSet0, *equippedItem, slot + 1 );
player.queuePacket( slotUpdate2 );
//player.updateModels( static_cast< Common::GearSetSlot >( slot ), equippedItem, true );
}
}
// Loop over all the changed items
for (int slot = 0; slot < 14; slot++ )
{
const auto fromSlot = packet.data().containerIndex[ slot ];
const auto fromContainer = packet.data().storageId[ slot ];
if ( fromContainer == Common::GearSet0 )
continue;
const auto fromItem = fromSlot == -1 ? nullptr : player.getItemAt( fromContainer, fromSlot );
const auto equippedItem = player.getItemAt( Common::GearSet0, slot );
if ( fromItem && equippedItem )
{
auto invTransPacket = makeZonePacket< Server::FFXIVIpcInventoryTransaction >( player.getId() );
invTransPacket->data().sequence = sequence;
invTransPacket->data().ownerId = player.getId();
invTransPacket->data().storageId = Common::GearSet0;
invTransPacket->data().catalogId = fromItem->getId();
invTransPacket->data().stackSize = fromItem->getStackSize();
invTransPacket->data().slotId = slot;
invTransPacket->data().type = Common::InventoryOperation::Swap;
player.queuePacket( invTransPacket );
player.swapItem( fromContainer, fromSlot, Common::GearSet0, slot );
//player.updateGearContainer( slot, fromItem );
//player.updateContainer( fromContainer, fromSlot, equippedItem );
}
else if ( fromItem && !equippedItem )
{
auto invTransPacket = makeZonePacket< Server::FFXIVIpcInventoryTransaction >( player.getId() );
invTransPacket->data().sequence = sequence;
invTransPacket->data().ownerId = player.getId();
invTransPacket->data().storageId = Common::GearSet0;
invTransPacket->data().catalogId = fromItem->getId();
invTransPacket->data().stackSize = fromItem->getStackSize();
invTransPacket->data().slotId = slot;
invTransPacket->data().type = Common::InventoryOperation::Move;
player.queuePacket( invTransPacket );
player.moveItem( fromContainer, fromSlot, Common::GearSet0, slot, false );
}
else if ( !fromItem && equippedItem )
{
player.equipItem( static_cast< Common::GearSetSlot >( slot ), equippedItem, false );
}
}
// Transaction finished
auto ackPacket = makeZonePacket< Server::FFXIVIpcInventoryTransactionFinish >( player.getId() );
ackPacket->data().sequenceId = sequence;
ackPacket->data().sequenceId1 = sequence;
ackPacket->data().padding = 3298534884017;
// Send the gear inventory
player.sendGearInventory();
// Send the player stats
player.sendStats();
// Send the player model
player.sendModel();
// Send status effect update
auto effectListPacket = makeZonePacket< Server::FFXIVIpcStatusEffectList >( player.getId() );
effectListPacket->data().classId = static_cast< uint8_t > ( player.getClass() );
effectListPacket->data().level1 = player.getLevel();
effectListPacket->data().level = player.getLevel();
effectListPacket->data().current_hp = player.getMaxHp();
effectListPacket->data().current_mp = player.getMaxMp();
effectListPacket->data().max_hp = player.getMaxHp();
effectListPacket->data().max_mp = player.getMaxMp();
player.sendToInRangeSet( effectListPacket, true );
// Send class info
auto classInfoPacket = makeZonePacket< FFXIVIpcUpdateClassInfo >( player.getId() );
classInfoPacket->data().classId = static_cast< uint8_t > ( player.getClass() );
classInfoPacket->data().level1 = player.getLevel();
classInfoPacket->data().level = player.getLevel();
classInfoPacket->data().nextLevelIndex = player.getLevel();
classInfoPacket->data().currentExp = player.getExp();
player.queuePacket( classInfoPacket );
}