1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-07 11:17:46 +00:00
sapphire/src/world/Network/Handlers/InventoryHandler.cpp

86 lines
2.6 KiB
C++
Raw Normal View History

2018-03-06 22:22:19 +01:00
#include <Common.h>
#include <Network/CommonNetwork.h>
2019-03-08 15:34:38 +01:00
#include <Network/GamePacket.h>
2018-03-06 22:22:19 +01:00
#include <Logging/Logger.h>
#include <Network/PacketContainer.h>
#include <Network/PacketDef/Zone/ClientZoneDef.h>
#include "Network/GameConnection.h"
#include "Network/PacketWrappers/ServerNoticePacket.h"
2019-07-21 22:33:33 +10:00
#include "Territory/Territory.h"
#include "Actor/Player.h"
#include "Session.h"
#include "WorldServer.h"
#include <Service.h>
2018-06-02 15:52:35 +02:00
using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::Network::Packets::WorldPackets::Client;
void Sapphire::Network::GameConnection::itemOperation( const Packets::FFXIVARR_PACKET_RAW& inPacket,
Entity::Player& player )
{
auto& server = Common::Service< World::WorldServer >::ref();
const auto packet = ZoneChannelPacket< FFXIVIpcClientInventoryItemOperation >( inPacket );
const auto operationType = packet.data().OperationType;
const auto splitCount = packet.data().SrcStack;
const auto fromSlot = packet.data().SrcContainerIndex;
const auto fromContainer = packet.data().SrcStorageId;
const auto toSlot = packet.data().DstContainerIndex;
const auto toContainer = packet.data().DstStorageId;
const auto contextId = packet.data().ContextId;
auto ackPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( player.getId() );
ackPacket->data().contextId = contextId;
ackPacket->data().operationType = operationType;
server.queueForPlayer( player.getCharacterId(), ackPacket );
Logger::debug( "OperationType: {0}", operationType );
// TODO: other inventory operations need to be implemented
switch( operationType )
{
case Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_DELETEITEM: // discard item action
{
player.discardItem( fromContainer, fromSlot );
}
2017-11-28 00:09:36 +01:00
break;
case Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_MOVEITEM: // move item action
{
player.moveItem( fromContainer, fromSlot, toContainer, toSlot );
}
2017-11-28 00:09:36 +01:00
break;
case ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_SWAPITEM: // swap item action
{
player.swapItem( fromContainer, fromSlot, toContainer, toSlot );
}
2017-11-28 00:09:36 +01:00
break;
case ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_MERGEITEM: // merge stack action
{
player.mergeItem( fromContainer, fromSlot, toContainer, toSlot );
}
2017-11-28 00:09:36 +01:00
break;
case ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_SPLITITEM: // split stack action
{
player.splitItem( fromContainer, fromSlot, toContainer, toSlot, splitCount );
}
2017-11-28 00:09:36 +01:00
break;
default:
break;
}
}