From 8f118c4ec84dd2d539a24554ca0225fac969e5ba Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Sun, 11 Nov 2018 14:27:39 +0100 Subject: [PATCH 1/8] Signs + rename --- src/common/Network/CommonActorControl.h | 2 + src/common/Network/PacketDef/Ipcs.h | 6 +- .../Network/PacketDef/Zone/ClientZoneDef.h | 12 ++++ .../Network/PacketDef/Zone/ServerZoneDef.h | 31 ++++++++ .../sapphire_zone/Network/GameConnection.h | 2 + .../Network/Handlers/ClientTriggerHandler.cpp | 71 ++++++++++++++++++- .../Network/Handlers/PacketHandlers.cpp | 7 ++ src/servers/sapphire_zone/Zone/HousingMgr.cpp | 16 +++++ src/servers/sapphire_zone/Zone/HousingMgr.h | 1 + src/servers/sapphire_zone/Zone/Land.cpp | 13 ++++ src/servers/sapphire_zone/Zone/Land.h | 8 ++- 11 files changed, 166 insertions(+), 3 deletions(-) diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index d255465a..e0b22868 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -290,6 +290,8 @@ enum ClientTriggerType AchievementList = 0x3E9, RequestHousingSign = 0x451, + RequestHousingInfoSign = 0x452, + RequestHousingRename = 0x45A, RequestHousingItemUI = 0x463, RequestSharedEstateSettings = 0x46F, diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index e11af4a3..f33b9399 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -189,7 +189,9 @@ namespace Core::Network::Packets LandUpdate = 0x0221, // updated 4.4 YardObjectSpawn = 0x0222, // updated 4.4 - LandPriceUpdate = 0x0224, // updated 4.3 + LandPriceUpdate = 0x0224, // updated 4.4 + LandInfoSign = 0x0225, // updated 4.4 + RenameLand = 0x0226, // updated 4.4 LandPermission = 0x0229, // updated 4.4 LandSetYardInitialize = 0x022C, // updated 4.4 YardObjectMove = 0x0230, // updated 4.4 @@ -287,6 +289,8 @@ namespace Core::Network::Packets LinkshellEventHandler = 0x0150, // updated 4.1 ?? LinkshellEventHandler1 = 0x0151, // updated 4.1 ?? + RenameLandHandler = 0x0171, // updated 4.4 + SetSharedEstateSettings = 0x0177, // updated 4.4 PerformNoteHandler = 0x029B, // updated 4.3 diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index f973bfa7..90b5f9b7 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -189,6 +189,18 @@ struct FFXIVIpcInventoryModifyHandler : /* 0028 */ uint32_t splitCount; }; +struct FFXIVIpcRenameLandHandler : + FFXIVIpcBasePacket< RenameLandHandler > +{ + /* 0000 */ uint16_t landId; + /* 0002 */ uint16_t wardNum; + /* 0004 */ uint16_t zoneId; + /* 0006 */ uint16_t worldId; + /* 0008 */ char landName[20]; + /* 0028 */ uint32_t padding; +}; + + struct FFXIVIpcSetSharedEstateSettings : FFXIVIpcBasePacket< SetSharedEstateSettings > { diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index b17910cf..6a87c9a9 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1605,6 +1605,37 @@ struct FFXIVIpcLandPriceUpdate : FFXIVIpcBasePacket< LandPriceUpdate > uint32_t timeLeft; }; +struct FFXIVIpcLandInfoSign : FFXIVIpcBasePacket< LandInfoSign > +{ + uint16_t landId; + uint16_t wardNum; + uint16_t zoneId; + uint16_t worldId; + uint32_t ownerId; + uint16_t someState1;//private 0x0 : fc 0x17 + uint8_t someState2;//private 0x21 : fc 0x40 + uint8_t someState3; //private 0x80 : fc 0 + uint32_t unknow1; //seems like not always 0 (6 of 5 times 0, one time it was 0x14) + uint8_t houseIconAdd; + uint8_t houseState; + uint8_t houseSize; + char landName[23]; + char landMsg[193]; + char ownerName[31]; + char fcTag[7]; + uint8_t tag[3]; +}; + +struct FFXIVIpcRenameLand : FFXIVIpcBasePacket< RenameLand > +{ + uint16_t landId; + uint16_t wardNum; + uint16_t zoneId; + uint16_t worldId; + char landName[20]; + uint32_t padding; +}; + struct FFXIVIpcLandSetMap : FFXIVIpcBasePacket< LandSetMap > { uint8_t u1; diff --git a/src/servers/sapphire_zone/Network/GameConnection.h b/src/servers/sapphire_zone/Network/GameConnection.h index 1138a5fc..faf12557 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -162,6 +162,8 @@ namespace Core::Network DECLARE_HANDLER( performNoteHandler ); + DECLARE_HANDLER( renameLandHandler ); + DECLARE_HANDLER( tellHandler ); }; diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index cbd7873a..d4db02a5 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -11,6 +11,7 @@ #include "Zone/Zone.h" #include "Zone/ZonePosition.h" #include "Zone/HousingZone.h" +#include "Zone/HousingMgr.h" #include "Zone/Land.h" #include "Network/GameConnection.h" @@ -335,9 +336,77 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR break; } + case ClientTriggerType::RequestHousingInfoSign: + { + + auto LandInfoSignPacket = makeZonePacket< Server::FFXIVIpcLandInfoSign >( player.getId() ); + + uint8_t ward = ( param12 & 0xFF00 ) >> 8; + uint8_t plot = ( param12 & 0xFF ); + pLog->debug( " Ward: " + std::to_string( ward ) + " Plot: " + std::to_string( plot ) ); + + player.setActiveLand( plot, ward ); + + auto zone = player.getCurrentZone(); + + auto hZone = std::dynamic_pointer_cast< HousingZone >( zone ); + + auto land = hZone->getLand( plot ); + if( !land ) + { + auto pHousingMgr = g_fw.get< HousingMgr >(); + land = pHousingMgr->getLandByOwnerId( player.getId() ); + } + + memcpy( &LandInfoSignPacket->data().landMsg, "Hello World", 11 ); + //memcpy( &LandInfoSignPacket->data().landName, &land->getLandName(), 20 ); + memcpy( &LandInfoSignPacket->data().landName, "Hello World", 11 ); + LandInfoSignPacket->data().houseSize = land->getHouseSize(); + LandInfoSignPacket->data().houseState = land->getState(); + LandInfoSignPacket->data().landId = land->getLandId(); + LandInfoSignPacket->data().ownerId = land->getPlayerOwner(); + memcpy( &LandInfoSignPacket->data().ownerName, "Hello World", 11 ); + LandInfoSignPacket->data().wardNum = land->getWardNum(); + LandInfoSignPacket->data().worldId = 67; + LandInfoSignPacket->data().zoneId = land->getZoneId(); + + player.queuePacket( LandInfoSignPacket ); + + break; + } + case ClientTriggerType::RequestHousingRename: + { + auto landRenamePacket = makeZonePacket< Server::FFXIVIpcRenameLand >( player.getId() ); + + uint8_t ward = ( param12 & 0xFF00 ) >> 8; + uint8_t plot = ( param12 & 0xFF ); + + auto zone = player.getCurrentZone(); + + auto hZone = std::dynamic_pointer_cast< HousingZone >( zone ); + + auto land = hZone->getLand( plot ); + + if( !land ) + { + auto pHousingMgr = g_fw.get< HousingMgr >(); + land = pHousingMgr->getLandByOwnerId( player.getId() ); + } + + landRenamePacket->data().landId = land->getLandId(); + landRenamePacket->data().wardNum = land->getWardNum(); + landRenamePacket->data().worldId = 67; + landRenamePacket->data().zoneId = land->getZoneId(); + memcpy( &landRenamePacket->data().landName, &land->getLandName(), 20 ); + + player.queuePacket( landRenamePacket ); + + break; + } case ClientTriggerType::RequestHousingItemUI: { - uint32_t plot = param2; + uint8_t ward = ( param12 & 0xFF00 ) >> 8; + uint8_t plot = ( param12 & 0xFF ); auto pShowHousingItemUIPacket = makeActorControl142( player.getId(), ShowHousingItemUI, 0, plot ); player.queuePacket( pShowHousingItemUIPacket ); diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 34293a13..af4e3a85 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -648,3 +648,10 @@ void Core::Network::GameConnection::performNoteHandler( const Core::Network::Pac memcpy( &performPacket->data().data[ 0 ], &inPacket.data[ 0x10 ], 32 ); player.sendToInRangeSet( performPacket ); } + +void Core::Network::GameConnection::renameLandHandler(const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, + Entity::Player& player) +{ + const auto packet = ZoneChannelPacket< Client::FFXIVIpcRenameLandHandler >( inPacket ); + +} diff --git a/src/servers/sapphire_zone/Zone/HousingMgr.cpp b/src/servers/sapphire_zone/Zone/HousingMgr.cpp index 48f4cdcd..a4756d82 100644 --- a/src/servers/sapphire_zone/Zone/HousingMgr.cpp +++ b/src/servers/sapphire_zone/Zone/HousingMgr.cpp @@ -53,6 +53,22 @@ Core::Data::HousingZonePtr Core::HousingMgr::getHousingZone( uint16_t id ) return it->second; } +Core::Data::HousingZonePtr Core::HousingMgr::getHousingZoneByLandSetId( uint32_t id ) +{ + for( const auto& hZoneIt : m_housingZonePtrMap ) + { + auto pHousingZone = hZoneIt.second; + for( uint8_t landId = 0; landId < 60; landId++ ) + { + if( pHousingZone->getLandSetId() == id ) + { + return pHousingZone; + } + } + } + return nullptr; +} + Core::LandPtr Core::HousingMgr::getLandByOwnerId( uint32_t id ) { for( const auto& hZoneIt : m_housingZonePtrMap ) diff --git a/src/servers/sapphire_zone/Zone/HousingMgr.h b/src/servers/sapphire_zone/Zone/HousingMgr.h index e2981ade..b1a77858 100644 --- a/src/servers/sapphire_zone/Zone/HousingMgr.h +++ b/src/servers/sapphire_zone/Zone/HousingMgr.h @@ -25,6 +25,7 @@ namespace Core uint16_t getNexLandId(); void insertHousingZone( Core::Data::HousingZonePtr hZone ); Core::Data::HousingZonePtr getHousingZone( uint16_t id ); + Core::Data::HousingZonePtr getHousingZoneByLandSetId( uint32_t id ); Core::LandPtr getLandByOwnerId( uint32_t id ); private: diff --git a/src/servers/sapphire_zone/Zone/Land.cpp b/src/servers/sapphire_zone/Zone/Land.cpp index 52ab103d..f7702680 100644 --- a/src/servers/sapphire_zone/Zone/Land.cpp +++ b/src/servers/sapphire_zone/Zone/Land.cpp @@ -39,6 +39,9 @@ Core::Land::Land( uint16_t zoneId, uint8_t wardNum, uint8_t landId, uint32_t lan { memset( &m_land, 0x00, sizeof( LandStruct ) ); memset( &m_tag, 0x00, 3 ); + memset( &m_landMsg, 0x00, 193 ); + memset( &m_landName, 0x00, 23 ); + load(); } @@ -152,6 +155,11 @@ void Core::Land::setSharing( uint8_t state ) m_land.iconAddIcon = state; } +void Core::Land::setLandName( std::string& name ) +{ + memcpy( &m_landName, &name, 20 ); +} + uint8_t Core::Land::getHouseSize() { return m_land.houseSize; @@ -192,6 +200,11 @@ uint16_t Core::Land::getZoneId() return m_zoneId; } +std::string Core::Land::getLandName() +{ + return std::string( m_landName ); +} + //Free Comapny void Core::Land::setFreeCompany( uint32_t id, uint32_t icon, uint32_t color ) { diff --git a/src/servers/sapphire_zone/Zone/Land.h b/src/servers/sapphire_zone/Zone/Land.h index 75d44ea4..f0576286 100644 --- a/src/servers/sapphire_zone/Zone/Land.h +++ b/src/servers/sapphire_zone/Zone/Land.h @@ -24,6 +24,7 @@ namespace Core void setState( uint8_t state ); void setOwnership( uint8_t state ); void setSharing( uint8_t state ); + void setLandName( std::string& name ); //Gerneral uint8_t getHouseSize(); @@ -34,6 +35,7 @@ namespace Core uint8_t getWardNum(); uint8_t getLandId(); uint16_t getZoneId(); + std::string getLandName(); //Free Comapny void setFreeCompany( uint32_t id, uint32_t icon, uint32_t color ); @@ -90,7 +92,11 @@ namespace Core uint32_t m_currentPrice; uint32_t m_minPrice; - //Tags + //information + char m_landName[23]; + char m_landMsg[193]; + char m_ownerName[31]; + char fcTag[7]; uint8_t m_tag[3]; }; From 4bf5644cce116a3913dd41625e5a61337862f815 Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Sun, 11 Nov 2018 14:34:56 +0100 Subject: [PATCH 2/8] fixes --- src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp | 4 ++-- src/servers/sapphire_zone/Zone/Land.cpp | 2 +- src/servers/sapphire_zone/Zone/Land.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index af4e3a85..cb03802e 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -649,8 +649,8 @@ void Core::Network::GameConnection::performNoteHandler( const Core::Network::Pac player.sendToInRangeSet( performPacket ); } -void Core::Network::GameConnection::renameLandHandler(const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, - Entity::Player& player) +void Core::Network::GameConnection::renameLandHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, + Entity::Player& player ) { const auto packet = ZoneChannelPacket< Client::FFXIVIpcRenameLandHandler >( inPacket ); diff --git a/src/servers/sapphire_zone/Zone/Land.cpp b/src/servers/sapphire_zone/Zone/Land.cpp index f7702680..2751a5b8 100644 --- a/src/servers/sapphire_zone/Zone/Land.cpp +++ b/src/servers/sapphire_zone/Zone/Land.cpp @@ -155,7 +155,7 @@ void Core::Land::setSharing( uint8_t state ) m_land.iconAddIcon = state; } -void Core::Land::setLandName( std::string& name ) +void Core::Land::setLandName( const std::string& name ) { memcpy( &m_landName, &name, 20 ); } diff --git a/src/servers/sapphire_zone/Zone/Land.h b/src/servers/sapphire_zone/Zone/Land.h index f0576286..20ca500b 100644 --- a/src/servers/sapphire_zone/Zone/Land.h +++ b/src/servers/sapphire_zone/Zone/Land.h @@ -24,7 +24,7 @@ namespace Core void setState( uint8_t state ); void setOwnership( uint8_t state ); void setSharing( uint8_t state ); - void setLandName( std::string& name ); + void setLandName( const std::string& name ); //Gerneral uint8_t getHouseSize(); From 8c5fbbedad617d22c787c61d6a8ebf760d57e2af Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Sun, 11 Nov 2018 14:53:19 +0100 Subject: [PATCH 3/8] fixed errors --- .../sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index d4db02a5..6f97e473 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -359,8 +359,7 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR } memcpy( &LandInfoSignPacket->data().landMsg, "Hello World", 11 ); - //memcpy( &LandInfoSignPacket->data().landName, &land->getLandName(), 20 ); - memcpy( &LandInfoSignPacket->data().landName, "Hello World", 11 ); + memcpy( &LandInfoSignPacket->data().landName, land->getLandName().c_str(), 20 ); LandInfoSignPacket->data().houseSize = land->getHouseSize(); LandInfoSignPacket->data().houseState = land->getState(); LandInfoSignPacket->data().landId = land->getLandId(); @@ -397,7 +396,7 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR landRenamePacket->data().wardNum = land->getWardNum(); landRenamePacket->data().worldId = 67; landRenamePacket->data().zoneId = land->getZoneId(); - memcpy( &landRenamePacket->data().landName, &land->getLandName(), 20 ); + memcpy( &landRenamePacket->data().landName, land->getLandName().c_str(), 20 ); player.queuePacket( landRenamePacket ); From 1808e1658560e334244e6f2903fdf0d0858c773a Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Mon, 12 Nov 2018 08:32:30 +0100 Subject: [PATCH 4/8] rename trigger (working) + build preset (starting) --- src/common/Network/CommonActorControl.h | 3 ++ src/common/Network/PacketDef/Ipcs.h | 1 + .../Network/PacketDef/Zone/ClientZoneDef.h | 7 +++ .../sapphire_zone/Network/GameConnection.cpp | 2 + .../sapphire_zone/Network/GameConnection.h | 2 + .../Network/Handlers/ClientTriggerHandler.cpp | 17 ++++++ .../Network/Handlers/PacketHandlers.cpp | 54 +++++++++++++++++++ src/servers/sapphire_zone/Zone/Land.cpp | 3 +- src/servers/sapphire_zone/Zone/Land.h | 1 + 9 files changed, 89 insertions(+), 1 deletion(-) diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index e0b22868..e9817c9b 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -214,6 +214,8 @@ enum ActorControlType : // Housing ShowHousingItemUI = 0x3F7, + ShowBuildPresetUI = 0x3E9, + BuildPresetResponse = 0x3ED, // PvP Duel SetPvPState = 0x5E0, // param3 must be 6 to engage a duel (hardcoded in the client) @@ -289,6 +291,7 @@ enum ClientTriggerType AchievementCritReq = 0x3E8, AchievementList = 0x3E9, + RequestHousingBuildPreset = 0x44C, RequestHousingSign = 0x451, RequestHousingInfoSign = 0x452, RequestHousingRename = 0x45A, diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index f33b9399..a8eac01c 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -277,6 +277,7 @@ namespace Core::Network::Packets InventoryModifyHandler = 0x0142, // updated 4.4 + BuildPresetHandler = 0x014A, // updated 4.4 TalkEventHandler = 0x014B, // updated 4.4 EmoteEventHandler = 0x014C, // updated 4.4 WithinRangeEventHandler = 0x014D, // updated 4.4 diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index 90b5f9b7..ac3c127c 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -200,6 +200,13 @@ struct FFXIVIpcRenameLandHandler : /* 0028 */ uint32_t padding; }; +struct FFXIVIpcBuildPresetHandler : + FFXIVIpcBasePacket< BuildPresetHandler > +{ + /* 0000 */ uint32_t itemId; + /* 0004 */ uint8_t plotNum; + /* 0005 */ char landSetString[27]; +}; struct FFXIVIpcSetSharedEstateSettings : FFXIVIpcBasePacket< SetSharedEstateSettings > diff --git a/src/servers/sapphire_zone/Network/GameConnection.cpp b/src/servers/sapphire_zone/Network/GameConnection.cpp index 879c7751..d0cdecbc 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.cpp +++ b/src/servers/sapphire_zone/Network/GameConnection.cpp @@ -83,6 +83,8 @@ Core::Network::GameConnection::GameConnection( Core::Network::HivePtr pHive, setZoneHandler( ClientZoneIpcType::InventoryModifyHandler, "InventoryModifyHandler", &GameConnection::inventoryModifyHandler ); + setZoneHandler( ClientZoneIpcType::BuildPresetHandler, "BuildPresetHandler", &GameConnection::eventHandlerTalk ); + setZoneHandler( ClientZoneIpcType::RenameLandHandler, "RenameLandHandler", &GameConnection::renameLandHandler ); setZoneHandler( ClientZoneIpcType::TalkEventHandler, "EventHandlerTalk", &GameConnection::eventHandlerTalk ); setZoneHandler( ClientZoneIpcType::EmoteEventHandler, "EventHandlerEmote", &GameConnection::eventHandlerEmote ); setZoneHandler( ClientZoneIpcType::WithinRangeEventHandler, "EventHandlerWithinRange", diff --git a/src/servers/sapphire_zone/Network/GameConnection.h b/src/servers/sapphire_zone/Network/GameConnection.h index faf12557..61040c33 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -164,6 +164,8 @@ namespace Core::Network DECLARE_HANDLER( renameLandHandler ); + DECLARE_HANDLER( buildPresetHandler ); + DECLARE_HANDLER( tellHandler ); }; diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index 6f97e473..e37f5763 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -310,6 +310,23 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR player.removeQuest( static_cast< uint16_t >( param1 ) ); break; } + case ClientTriggerType::RequestHousingBuildPreset: + { + auto pShowBuildPresetUIPacket = makeActorControl142( player.getId(), ShowBuildPresetUI, param11 ); + + auto zone = player.getCurrentZone(); + + auto hZone = std::dynamic_pointer_cast< HousingZone >( zone ); + + if (!hZone) + return; + + player.setActiveLand( param11, hZone->getWardNum() ); + + player.queuePacket( pShowBuildPresetUIPacket ); + + break; + } case ClientTriggerType::RequestHousingSign: { diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index cb03802e..d3a69bfc 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -16,6 +16,9 @@ #include "Zone/TerritoryMgr.h" #include "Zone/Zone.h" +#include "Zone/HousingZone.h" +#include "Zone/HousingMgr.h" +#include "Zone/Land.h" #include "Zone/ZonePosition.h" #include "Network/PacketWrappers/InitUIPacket.h" @@ -654,4 +657,55 @@ void Core::Network::GameConnection::renameLandHandler( const Core::Network::Pack { const auto packet = ZoneChannelPacket< Client::FFXIVIpcRenameLandHandler >( inPacket ); + uint32_t landSetId = ( static_cast< uint32_t >( packet.data().zoneId ) << 16 ) | packet.data().wardNum; + auto pHousingMgr = g_fw.get< HousingMgr >(); + auto pLand = pHousingMgr->getHousingZoneByLandSetId( landSetId )->getLand( packet.data().landId ); + + if( !pLand ) + return; + + pLand->setLandName( packet.data().landName ); +} + +void Core::Network::GameConnection::buildPresetHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, + Entity::Player& player ) +{ + const auto packet = ZoneChannelPacket< Client::FFXIVIpcBuildPresetHandler >( inPacket ); + + auto zone = player.getCurrentZone(); + auto plotNum = packet.data().plotNum; + auto preset = packet.data().itemId; + std::string landString = std::string( packet.data().stateString ); + auto hZone = std::dynamic_pointer_cast< HousingZone >( zone ); + + if( !hZone ) + return; + + auto pLand = hZone->getLand( plotNum ); + /* + if (!pLand) + player.sendDebug( "Something went wrong..." ); + + if( stateString.find( "Private" ) ) + { + pLand->setPreset( preset ); + pLand->setState( HouseState::privateHouse ); + pLand->UpdateLandDb(); + hZone->sendLandUpdate( plotNum ); + } + else if( stateString.find("Free") ) + { + pLand->setPreset( preset ); + pLand->setState( HouseState::fcHouse ); + pLand->UpdateLandDb(); + hZone->sendLandUpdate( plotNum ); + } + else + { + player.sendDebug( "You tried to build a preset on not supported land." ); + } + + auto pSuccessBuildingPacket = makeActorControl142( player.getId(), BuildPresetResponse, plotNum ); + + player.queuePacket( pSuccessBuildingPacket );*/ } diff --git a/src/servers/sapphire_zone/Zone/Land.cpp b/src/servers/sapphire_zone/Zone/Land.cpp index 2751a5b8..2201c3c1 100644 --- a/src/servers/sapphire_zone/Zone/Land.cpp +++ b/src/servers/sapphire_zone/Zone/Land.cpp @@ -65,6 +65,7 @@ void Core::Land::load() m_currentPrice = m_landInfo->prices[ m_landId ]; m_minPrice = m_landInfo->minPrices[ m_landId ]; m_land.houseSize = m_landInfo->sizes[ m_landId ]; + m_land.houseState = HouseState::forSale; } else { @@ -157,7 +158,7 @@ void Core::Land::setSharing( uint8_t state ) void Core::Land::setLandName( const std::string& name ) { - memcpy( &m_landName, &name, 20 ); + memcpy( &m_landName, name.c_str(), 20 ); } uint8_t Core::Land::getHouseSize() diff --git a/src/servers/sapphire_zone/Zone/Land.h b/src/servers/sapphire_zone/Zone/Land.h index 20ca500b..6cdbf593 100644 --- a/src/servers/sapphire_zone/Zone/Land.h +++ b/src/servers/sapphire_zone/Zone/Land.h @@ -1,6 +1,7 @@ #ifndef LAND_H_ #define LAND_H_ #include +#include "Exd/ExdDataGenerated.h" #include "ForwardsZone.h" namespace Core From 1a618ee4109e77091b9f289b35c9e615dc8300d7 Mon Sep 17 00:00:00 2001 From: XeAri Date: Mon, 12 Nov 2018 08:43:24 +0100 Subject: [PATCH 5/8] Update ClientZoneDef.h --- src/common/Network/PacketDef/Zone/ClientZoneDef.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index ac3c127c..ac8ea9dc 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -205,7 +205,7 @@ struct FFXIVIpcBuildPresetHandler : { /* 0000 */ uint32_t itemId; /* 0004 */ uint8_t plotNum; - /* 0005 */ char landSetString[27]; + /* 0005 */ char stateString[27]; }; struct FFXIVIpcSetSharedEstateSettings : From c9eb1bafce88184d439a4a944731a5331cfdfef7 Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Mon, 12 Nov 2018 09:32:20 +0100 Subject: [PATCH 6/8] name fixes --- src/common/Network/PacketDef/Ipcs.h | 4 ++-- src/common/Network/PacketDef/Zone/ClientZoneDef.h | 2 +- src/common/Network/PacketDef/Zone/ServerZoneDef.h | 2 +- src/servers/sapphire_zone/Network/GameConnection.cpp | 2 +- src/servers/sapphire_zone/Network/GameConnection.h | 2 +- .../sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp | 2 +- src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 39ba1963..8b43346b 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -189,7 +189,7 @@ namespace Core::Network::Packets LandPriceUpdate = 0x0224, // updated 4.4 LandInfoSign = 0x0225, // updated 4.4 - RenameLand = 0x0226, // updated 4.4 + LandRename = 0x0226, // updated 4.4 LandPermissionSlot = 0x0228, // updated 4.4 @@ -296,7 +296,7 @@ namespace Core::Network::Packets LinkshellEventHandler = 0x0150, // updated 4.1 ?? LinkshellEventHandler1 = 0x0151, // updated 4.1 ?? - RenameLandHandler = 0x0171, // updated 4.4 + LandRenameHandler = 0x0171, // updated 4.4 SetSharedEstateSettings = 0x0177, // updated 4.4 diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index ac8ea9dc..7dae9236 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -190,7 +190,7 @@ struct FFXIVIpcInventoryModifyHandler : }; struct FFXIVIpcRenameLandHandler : - FFXIVIpcBasePacket< RenameLandHandler > + FFXIVIpcBasePacket< LandRenameHandler > { /* 0000 */ uint16_t landId; /* 0002 */ uint16_t wardNum; diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index b0f29327..84ab8c5f 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1632,7 +1632,7 @@ struct FFXIVIpcLandInfoSign : FFXIVIpcBasePacket< LandInfoSign > uint8_t tag[3]; }; -struct FFXIVIpcRenameLand : FFXIVIpcBasePacket< RenameLand > +struct FFXIVIpcLandRename : FFXIVIpcBasePacket< LandRename > { uint16_t landId; uint16_t wardNum; diff --git a/src/servers/sapphire_zone/Network/GameConnection.cpp b/src/servers/sapphire_zone/Network/GameConnection.cpp index d0cdecbc..5d412727 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.cpp +++ b/src/servers/sapphire_zone/Network/GameConnection.cpp @@ -84,7 +84,7 @@ Core::Network::GameConnection::GameConnection( Core::Network::HivePtr pHive, &GameConnection::inventoryModifyHandler ); setZoneHandler( ClientZoneIpcType::BuildPresetHandler, "BuildPresetHandler", &GameConnection::eventHandlerTalk ); - setZoneHandler( ClientZoneIpcType::RenameLandHandler, "RenameLandHandler", &GameConnection::renameLandHandler ); + setZoneHandler( ClientZoneIpcType::LandRenameHandler, "LandRenameHandler", &GameConnection::landRenameHandler ); setZoneHandler( ClientZoneIpcType::TalkEventHandler, "EventHandlerTalk", &GameConnection::eventHandlerTalk ); setZoneHandler( ClientZoneIpcType::EmoteEventHandler, "EventHandlerEmote", &GameConnection::eventHandlerEmote ); setZoneHandler( ClientZoneIpcType::WithinRangeEventHandler, "EventHandlerWithinRange", diff --git a/src/servers/sapphire_zone/Network/GameConnection.h b/src/servers/sapphire_zone/Network/GameConnection.h index 61040c33..8ba31549 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -162,7 +162,7 @@ namespace Core::Network DECLARE_HANDLER( performNoteHandler ); - DECLARE_HANDLER( renameLandHandler ); + DECLARE_HANDLER( landRenameHandler ); DECLARE_HANDLER( buildPresetHandler ); diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index e37f5763..f4b69960 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -392,7 +392,7 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR } case ClientTriggerType::RequestHousingRename: { - auto landRenamePacket = makeZonePacket< Server::FFXIVIpcRenameLand >( player.getId() ); + auto landRenamePacket = makeZonePacket< Server::FFXIVIpcLandRename >( player.getId() ); uint8_t ward = ( param12 & 0xFF00 ) >> 8; uint8_t plot = ( param12 & 0xFF ); diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index d3a69bfc..de2f34d5 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -652,7 +652,7 @@ void Core::Network::GameConnection::performNoteHandler( const Core::Network::Pac player.sendToInRangeSet( performPacket ); } -void Core::Network::GameConnection::renameLandHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, +void Core::Network::GameConnection::landRenameHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { const auto packet = ZoneChannelPacket< Client::FFXIVIpcRenameLandHandler >( inPacket ); From c4cb8ecb7cd872047e9e237e56981b71e889623d Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Mon, 12 Nov 2018 09:40:20 +0100 Subject: [PATCH 7/8] setting land name like retail --- src/servers/Scripts/common/CmnDefHousingSignboard.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/servers/Scripts/common/CmnDefHousingSignboard.cpp b/src/servers/Scripts/common/CmnDefHousingSignboard.cpp index 43e01820..12c89907 100644 --- a/src/servers/Scripts/common/CmnDefHousingSignboard.cpp +++ b/src/servers/Scripts/common/CmnDefHousingSignboard.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -38,6 +39,8 @@ public: { case LandPurchaseResult::SUCCESS: { + pHousing->getLand( activeLand.plot )->setLandName( "Private Estate" + std::to_string( activeLand.ward ) + "-" + std::to_string( activeLand.plot ) ); + auto screenMsgPkt = makeActorControl143( player.getId(), ActorControl::DutyQuestScreenMsg, m_id, 0x98 ); player.queuePacket( screenMsgPkt ); auto screenMsgPkt2 = makeActorControl143( player.getId(), ActorControl::LogMsg, 0x0D16, 0x1AA, From 4763451da9103ce5509405eb00ac56036b18cef9 Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Mon, 12 Nov 2018 09:54:15 +0100 Subject: [PATCH 8/8] moving init name to purcahse --- src/servers/Scripts/common/CmnDefHousingSignboard.cpp | 3 --- src/servers/sapphire_zone/Zone/HousingZone.cpp | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/servers/Scripts/common/CmnDefHousingSignboard.cpp b/src/servers/Scripts/common/CmnDefHousingSignboard.cpp index 12c89907..43e01820 100644 --- a/src/servers/Scripts/common/CmnDefHousingSignboard.cpp +++ b/src/servers/Scripts/common/CmnDefHousingSignboard.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include #include @@ -39,8 +38,6 @@ public: { case LandPurchaseResult::SUCCESS: { - pHousing->getLand( activeLand.plot )->setLandName( "Private Estate" + std::to_string( activeLand.ward ) + "-" + std::to_string( activeLand.plot ) ); - auto screenMsgPkt = makeActorControl143( player.getId(), ActorControl::DutyQuestScreenMsg, m_id, 0x98 ); player.queuePacket( screenMsgPkt ); auto screenMsgPkt2 = makeActorControl143( player.getId(), ActorControl::LogMsg, 0x0D16, 0x1AA, diff --git a/src/servers/sapphire_zone/Zone/HousingZone.cpp b/src/servers/sapphire_zone/Zone/HousingZone.cpp index eea9a46d..8f45e1a5 100644 --- a/src/servers/sapphire_zone/Zone/HousingZone.cpp +++ b/src/servers/sapphire_zone/Zone/HousingZone.cpp @@ -193,6 +193,7 @@ Core::LandPurchaseResult Core::HousingZone::purchseLand( Entity::Player& player, player.setLandPermissions( LandPermissionSlot::Private, 0x00, plot, pHousing->getWardNum(), pHousing->getTerritoryTypeId() ); player.sendLandPermissions(); + pLand->setLandName( "Private Estate" + std::to_string( pHousing->getWardNum() ) + "-" + std::to_string( plot ) ); pLand->UpdateLandDb(); sendLandUpdate( plot ); return LandPurchaseResult::SUCCESS;