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] 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