From 84d7159e47f5ccb0ace65acc5a3041e3743e2786 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Thu, 29 Nov 2018 00:19:37 +1100 Subject: [PATCH] add estate guest access menu --- src/common/Network/PacketDef/Ipcs.h | 1 + .../Network/PacketDef/Zone/ServerZoneDef.h | 7 +++++ .../Network/Handlers/ClientTriggerHandler.cpp | 16 ++++++++++++ src/servers/sapphire_zone/Zone/HousingMgr.cpp | 26 +++++++++++++++++++ src/servers/sapphire_zone/Zone/HousingMgr.h | 2 ++ 5 files changed, 52 insertions(+) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index a50a5c3e..74b997d1 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -195,6 +195,7 @@ namespace Core::Network::Packets HousingUpdateLandFlagsSlot = 0x0228, // updated 4.4 HousingLandFlags = 0x0229, // updated 4.4 + HousingShowEstateGuestAccess = 0x022A, // updated 4.4 LandSetYardInitialize = 0x022C, // updated 4.4 diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index b6cc582f..215a14d0 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1734,6 +1734,13 @@ struct FFXIVIpcHousingEstateGreeting : FFXIVIpcBasePacket< HousingEstateGreeting char message[200]; }; +struct FFXIVIpcHousingShowEstateGuestAccess : + FFXIVIpcBasePacket< HousingShowEstateGuestAccess > +{ + uint32_t unknown[2]; + Common::LandIdent ident; +}; + /** * Structural representation of the packet sent by the server * to show the current shared estate settings diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index d855cd98..444a01dc 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -392,6 +392,22 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR break; } + case ClientTriggerType::RequestEstateEditGuestAccessSettings: + { + 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; + + pHousingMgr->requestEstateEditGuestAccess( player, territoryTypeId, worldId, ward, plot ); + + break; + } case ClientTriggerType::RequestHousingItemUI: { uint8_t ward = ( param12 & 0xFF00 ) >> 8; diff --git a/src/servers/sapphire_zone/Zone/HousingMgr.cpp b/src/servers/sapphire_zone/Zone/HousingMgr.cpp index 898a4845..09476248 100644 --- a/src/servers/sapphire_zone/Zone/HousingMgr.cpp +++ b/src/servers/sapphire_zone/Zone/HousingMgr.cpp @@ -400,3 +400,29 @@ void Core::HousingMgr::updateEstateGreeting( Entity::Player& player, const Commo // Greeting updated. player.sendLogMessage( 3381 ); } + +void Core::HousingMgr::requestEstateEditGuestAccess( Entity::Player& player, uint16_t territoryTypeId, uint16_t worldId, uint8_t wardId, uint8_t plotId ) +{ + auto landSetId = toLandSetId( territoryTypeId, wardId ); + auto hZone = getHousingZoneByLandSetId( landSetId ); + + if( !hZone ) + return; + + auto land = hZone->getLand( plotId ); + if( !land ) + return; + + // todo: add proper permission check + if( land->getPlayerOwner() != player.getId() ) + return; + + auto packet = makeZonePacket< FFXIVIpcHousingShowEstateGuestAccess >( player.getId() ); + + packet->data().ident.landId = plotId; + packet->data().ident.territoryTypeId = territoryTypeId; + packet->data().ident.wardNum = wardId; + packet->data().ident.worldId = worldId; + + player.queuePacket( packet ); +} diff --git a/src/servers/sapphire_zone/Zone/HousingMgr.h b/src/servers/sapphire_zone/Zone/HousingMgr.h index fa117cf4..bd3c39db 100644 --- a/src/servers/sapphire_zone/Zone/HousingMgr.h +++ b/src/servers/sapphire_zone/Zone/HousingMgr.h @@ -41,6 +41,8 @@ namespace Core void requestEstateEditGreeting( Entity::Player& player, uint16_t territoryTypeId, uint16_t worldId, uint8_t wardId, uint8_t plotId ); void updateEstateGreeting( Entity::Player& player, const Common::LandIdent& ident, const std::string& greeting ); + void requestEstateEditGuestAccess( Entity::Player& player, uint16_t territoryTypeId, uint16_t worldId, uint8_t wardId, uint8_t plotId ); + private: };