From c156ee2d57f94fab1e5a962afe3c32ce9c4b8183 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 3 Feb 2018 02:11:29 +1100 Subject: [PATCH] add festival support --- src/common/Common.h | 2 ++ src/common/Network/PacketDef/Zone/ServerZoneDef.h | 2 +- src/servers/sapphire_zone/Actor/Player.cpp | 1 + .../DebugCommand/DebugCommandHandler.cpp | 15 +++++++++++++++ src/servers/sapphire_zone/Zone/Zone.cpp | 11 +++++++++++ src/servers/sapphire_zone/Zone/Zone.h | 5 +++++ 6 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/common/Common.h b/src/common/Common.h index 94736d9b..507f8727 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -635,6 +635,8 @@ namespace Common { GearSetEquipMsg = 0x321, + DisableCurrentFestival = 0x386, + ToggleOrchestrionUnlock = 0x396, Dismount = 0x3a0 }; diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 0cb6b8b3..77b127a5 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -600,7 +600,7 @@ struct FFXIVIpcInitZone : FFXIVIpcBasePacket uint8_t weatherId; uint8_t bitmask; uint16_t unknown5; - uint16_t unknown6; + uint16_t festivalId; uint16_t unknown7; uint32_t unknown8; Common::FFXIVARR_POSITION3 pos; diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index fa8c1d3b..f0a0b29a 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -1632,6 +1632,7 @@ void Player::sendZonePackets() initZonePacket.data().weatherId = static_cast< uint8_t >( getCurrentZone()->getCurrentWeather() ); initZonePacket.data().bitmask = 0x1; initZonePacket.data().unknown5 = 0x2A; + initZonePacket.data().festivalId = getCurrentZone()->getCurrentFestival(); initZonePacket.data().pos.x = getPos().x; initZonePacket.data().pos.y = getPos().y; initZonePacket.data().pos.z = getPos().z; diff --git a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp index 2902dc13..76088f13 100644 --- a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp @@ -762,4 +762,19 @@ void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, bo { player.exitInstance(); } + else if( subCommand == "festival" ) + { + uint32_t festivalId; + sscanf( params.c_str(), "%d", &festivalId ); + + player.getCurrentZone()->setCurrentFestival( static_cast< uint16_t >( festivalId ) ); + } + else if( subCommand == "disablefestival" ) + { + Network::Packets::ZoneChannelPacket< Network::Packets::Server::FFXIVIpcActorControl143 > actorControl( player.getId() ); + actorControl.data().category = Core::Common::ActorControlType::DisableCurrentFestival; + player.queuePacket( actorControl ); + + player.getCurrentZone()->setCurrentFestival( 0 ); + } } diff --git a/src/servers/sapphire_zone/Zone/Zone.cpp b/src/servers/sapphire_zone/Zone/Zone.cpp index c2141e68..0c6b48fd 100644 --- a/src/servers/sapphire_zone/Zone/Zone.cpp +++ b/src/servers/sapphire_zone/Zone/Zone.cpp @@ -48,6 +48,7 @@ Zone::Zone() , m_currentWeather( static_cast< uint8_t >( Common::Weather::FairSkies ) ) , m_weatherOverride( 0 ) , m_lastMobUpdate( 0 ) + , m_currentFestivalId( 0 ) { } @@ -99,6 +100,16 @@ uint8_t Zone::getCurrentWeather() const return m_currentWeather; } +uint16_t Zone::getCurrentFestival() const +{ + return m_currentFestivalId; +} + +void Zone::setCurrentFestival( uint16_t festivalId ) +{ + m_currentFestivalId = festivalId; +} + CellCache* Zone::getCellCacheList( uint32_t cellx, uint32_t celly ) { assert( cellx < _sizeX ); diff --git a/src/servers/sapphire_zone/Zone/Zone.h b/src/servers/sapphire_zone/Zone/Zone.h index 2c1fe699..3f34f264 100644 --- a/src/servers/sapphire_zone/Zone/Zone.h +++ b/src/servers/sapphire_zone/Zone/Zone.h @@ -50,6 +50,8 @@ protected: uint64_t m_lastMobUpdate; + uint16_t m_currentFestivalId; + public: Zone(); @@ -65,6 +67,9 @@ public: uint8_t getCurrentWeather() const; + uint16_t getCurrentFestival() const; + void setCurrentFestival( uint16_t festivalId ); + CellCache* getCellCacheList( uint32_t cellx, uint32_t celly ); CellCache* getCellCacheAndCreate( uint32_t cellx, uint32_t celly );