From 8d6ec91757b8b48440de959b157437a9fe41d1cf Mon Sep 17 00:00:00 2001 From: Tahir Akhlaq Date: Tue, 11 Sep 2018 17:46:04 +0100 Subject: [PATCH] added equip models for examine (todo: main/sub/accessories) - added stub for item crafter name request --- src/common/Network/CommonActorControl.h | 2 +- src/common/Network/PacketDef/Ipcs.h | 3 ++- .../Network/PacketDef/Zone/ServerZoneDef.h | 18 ++++++++++--- .../Network/Handlers/ClientTriggerHandler.cpp | 27 +++++++++++++++++++ 4 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index c2e7dc44..acb94a39 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -250,7 +250,7 @@ enum ClientTriggerType ClearWaymarks = 0x13A, CameraMode = 0x13B, // param12, 1 = camera mode enable, 0 = disable - + CharaNameReq = 0x13D, // requests character name by content id HuntingLogDetails = 0x194, Timers = 0x1AB, diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index ef519105..263fb39d 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -136,7 +136,8 @@ enum ServerZoneIpcType : PlayerStateFlags = 0x0184, // updated 4.3 PlayerClassInfo = 0x0185, // updated 4.3 ModelEquip = 0x0186, // updated 4.3 - Examine = 0x0187, // update 4.1 + Examine = 0x0187, // updated 4.3 + CharaNameReq = 0x0189, // updated 4.3 UpdateClassInfo = 0x018A, // updated 4.3 ItemInfo = 0x0190, // updated 4.3 diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 7de4543a..d0ef53b3 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -988,14 +988,17 @@ struct FFXIVIpcExamine : char level; uint16_t padding; uint16_t titleId; + //char grandCompany; + //char grandCompanyRank; char unknown[56]; struct ItemData { uint32_t catalogId; uint32_t appearanceCatalogId; - uint64_t unknown2; - uint32_t unknown3; + uint64_t crafterId; + uint8_t quality; + uint8_t unknown[3]; struct Materia { uint16_t materiaId; @@ -1007,8 +1010,15 @@ struct FFXIVIpcExamine : char unk3[16]; char look[26]; char padding3[5]; - //uint32_t models[10]; - char unknown4[270]; + uint32_t models[10]; + char unknown4[200]; +}; + +struct FFXIVIpcCharaNameReq : + FFXIVIpcBasePacket< CharaNameReq > +{ + uint64_t contentId; + char name[32]; }; /** diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index c4bdeeeb..3d97b534 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -60,16 +60,27 @@ void examineHandler( Core::Entity::Player& player, uint32_t targetId ) packet->data().unkFlag1 = 4; packet->data().unkFlag2 = 1; packet->data().titleId = pPlayer->getTitle(); + //packet->data().grandCompany = 1; //packet->data().grandCompanyRank = 2; memcpy( packet->data().look, pPlayer->getLookArray(), sizeof( packet->data().look ) ); + packet->data().models[ 0 ] = pPlayer->getModelForSlot( Common::GearSetSlot::Head ); + packet->data().models[ 1 ] = pPlayer->getModelForSlot( Common::GearSetSlot::Body ); + packet->data().models[ 2 ] = pPlayer->getModelForSlot( Common::GearSetSlot::Hands ); + packet->data().models[ 3 ] = pPlayer->getModelForSlot( Common::GearSetSlot::Legs ); + packet->data().models[ 4 ] = pPlayer->getModelForSlot( Common::GearSetSlot::Feet ); + + // todo: main/sub/other stuff too + for( auto i = 0; i < Common::GearSetSlot::SoulCrystal + 1; ++i) { auto pItem = pPlayer->getItemAt( Common::InventoryType::GearSet0, i ); if( pItem ) { + auto slot = static_cast< Common::GearSetSlot >( i ); auto& entry = packet->data().entries[i]; entry.catalogId = pItem->getId(); + entry.quality = pItem->isHq(); //entry.appearanceCatalogId = pItem->getGlamourId() // todo: glamour/materia etc. } @@ -183,6 +194,22 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR player.updateHowtosSeen( howToId ); break; } + case ClientTriggerType::CharaNameReq: + { + uint64_t targetContentId = param1; + // todo: look up player by content id + /* + auto packet = makeZonePacket< FFXIVIpcCharaNameReq >( player.getId() ); + packet->data().contentId = targetContentId; + + // lookup the name + + strcpy( packet->data().name, name ); + + player.queuePacket( packet ); + */ + break; + } case ClientTriggerType::EmoteReq: // emote { uint64_t targetId = player.getTargetId();