diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index a8ee1df1..518d1c91 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -304,6 +304,7 @@ namespace Core::Network::Packets LinkshellEventHandler1 = 0x1151, // updated 4.1 ?? LandRenameHandler = 0x0171, // updated 4.4 + LandChangeEstateMessageHandler = 0x0172, // updated 4.4 SetSharedEstateSettings = 0x0177, // updated 4.4 diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index c7c80203..1f603d61 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1730,10 +1730,7 @@ struct FFXIVIpcHousingWardInfo : FFXIVIpcBasePacket< HousingWardInfo > struct FFXIVIpcHousingEstateGreeting : FFXIVIpcBasePacket< HousingEstateGreeting > { - uint8_t plotId; - uint8_t pad[3]; // unsure - uint16_t territoryTypeId; - uint16_t unk; + Common::LandIdent landIdent; char message[200]; }; diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index 45d6c568..b81133ba 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -365,28 +365,30 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR } case ClientTriggerType::RequestEstateRename: { - // removed temporarly, there is no such thing as a LandName - auto landRenamePacket = makeZonePacket< Server::FFXIVIpcLandRename >( player.getId() ); + uint16_t territoryTypeId = param11 & 0xFFFF; + uint16_t worldId = param11 >> 16; uint8_t ward = ( param12 & 0xFF00 ) >> 8; uint8_t plot = ( param12 & 0xFF ); - auto zone = player.getCurrentZone(); + auto pHousingMgr = g_fw.get< HousingMgr >(); + if( !pHousingMgr ) + break; - auto hZone = std::dynamic_pointer_cast< HousingZone >( zone ); + auto landSetId = pHousingMgr->toLandSetId( territoryTypeId, ward ); + auto hZone = pHousingMgr->getHousingZoneByLandSetId( landSetId ); + + if( !hZone ) + break; auto land = hZone->getLand( plot ); - if( !land ) - { - auto pHousingMgr = g_fw.get< HousingMgr >(); - land = pHousingMgr->getLandByOwnerId( player.getId() ); - } - auto house = land->getHouse(); if( !house ) break; + auto landRenamePacket = makeZonePacket< Server::FFXIVIpcLandRename >( player.getId() ); + landRenamePacket->data().landIdent.landId = land->getLandId(); landRenamePacket->data().landIdent.wardNum = land->getWardNum(); landRenamePacket->data().landIdent.worldId = 67; @@ -397,6 +399,44 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR break; } + case ClientTriggerType::RequestEstateEditGreeting: + { + uint16_t territoryTypeId = param11 & 0xFFFF; + uint16_t worldId = param11 >> 16; + + uint8_t ward = ( param12 & 0xFF00 ) >> 8; + uint8_t plot = ( param12 & 0xFF ); + + auto pHousingMgr = g_fw.get< HousingMgr >(); + if( !pHousingMgr ) + break; + + auto landSetId = pHousingMgr->toLandSetId( territoryTypeId, ward ); + auto hZone = pHousingMgr->getHousingZoneByLandSetId( landSetId ); + + if( !hZone ) + break; + + auto land = hZone->getLand( plot ); + if( !land ) + break; + + auto house = land->getHouse(); + if( !house ) + break; + + auto estateGreetingPacket = makeZonePacket< Server::FFXIVIpcHousingEstateGreeting >( player.getId() ); + + estateGreetingPacket->data().landIdent.landId = land->getLandId(); + estateGreetingPacket->data().landIdent.wardNum = land->getWardNum(); + estateGreetingPacket->data().landIdent.worldId = 67; + estateGreetingPacket->data().landIdent.territoryTypeId = land->getTerritoryTypeId(); + memcpy( &estateGreetingPacket->data().message, house->getHouseGreeting().c_str(), sizeof( estateGreetingPacket->data().message ) ); + + player.queuePacket( estateGreetingPacket ); + + break; + } case ClientTriggerType::RequestHousingItemUI: { uint8_t ward = ( param12 & 0xFF00 ) >> 8;