From f0319081f20ed899653bc3be50d9c4301e3b8340 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 15 Mar 2018 18:06:12 +1100 Subject: [PATCH 1/2] style points and packet def --- src/common/Network/PacketDef/Ipcs.h | 1 + src/servers/sapphire_zone/Zone/InstanceContent.cpp | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index fe3785af..0925c62b 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -206,6 +206,7 @@ namespace Packets { SetSearchInfoHandler = 0x00D2, // updated 4.2 BlackListHandler = 0x00E0, // updated 4.2 + PlayerSearchHandler = 0x00E2, // updated 4.2 LinkshellListHandler = 0x00E8, // updated 4.2 diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index abc87863..2948b523 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -274,7 +274,7 @@ void Core::InstanceContent::setBranch( uint8_t value ) void Core::InstanceContent::startQte() { - for ( const auto& playerIt : m_playerMap ) + for( const auto& playerIt : m_playerMap ) { auto player = playerIt.second; player->queuePacket( ActorControlPacket143( player->getId(), DirectorUpdate, getDirectorId(), 0x8000000A ) ); @@ -284,7 +284,7 @@ void Core::InstanceContent::startQte() void Core::InstanceContent::startEventCutscene() { // TODO: lock player movement - for ( const auto& playerIt : m_playerMap ) + for( const auto& playerIt : m_playerMap ) { auto player = playerIt.second; player->queuePacket( ActorControlPacket143( player->getId(), DirectorUpdate, getDirectorId(), 0x80000008 ) ); @@ -293,7 +293,7 @@ void Core::InstanceContent::startEventCutscene() void Core::InstanceContent::endEventCutscene() { - for ( const auto& playerIt : m_playerMap ) + for( const auto& playerIt : m_playerMap ) { auto player = playerIt.second; player->queuePacket( ActorControlPacket143( player->getId(), DirectorUpdate, getDirectorId(), 0x80000009 ) ); From 108268b1070dc71b77292c1fedcb9604df6ec1ce Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 15 Mar 2018 20:48:35 +1100 Subject: [PATCH 2/2] bgm is set correctly for instances --- src/common/Common.h | 2 ++ src/servers/sapphire_zone/Actor/Player.h | 2 +- .../sapphire_zone/Actor/PlayerEvent.cpp | 6 +++--- .../DebugCommand/DebugCommandHandler.cpp | 8 ++++++++ .../sapphire_zone/Zone/InstanceContent.cpp | 19 ++++++++++++++++--- .../sapphire_zone/Zone/InstanceContent.h | 6 ++++++ 6 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/common/Common.h b/src/common/Common.h index d1a8810d..aadddb7b 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -477,6 +477,8 @@ namespace Common { FreeEventPos = 0x8A, + SetBGM = 0xA1, + UnlockAetherCurrentMsg = 0xA4, RemoveName = 0xA8, diff --git a/src/servers/sapphire_zone/Actor/Player.h b/src/servers/sapphire_zone/Actor/Player.h index df59c2a9..1bd8f2e6 100644 --- a/src/servers/sapphire_zone/Actor/Player.h +++ b/src/servers/sapphire_zone/Actor/Player.h @@ -58,7 +58,7 @@ public: /*! play a subevent */ void eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3 ); - void directorPlayScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3 ); + void directorPlayScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam3, uint32_t eventParam4, uint32_t eventParam5 = 0 ); /*! play a subevent */ void eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags, diff --git a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp index 411430a3..7aff9966 100644 --- a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp @@ -75,8 +75,8 @@ void Core::Entity::Player::checkEvent( uint32_t eventId ) } -void Core::Entity::Player::directorPlayScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, - uint32_t eventParam3 ) +void Core::Entity::Player::directorPlayScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam3, + uint32_t eventParam4, uint32_t eventParam5 ) { if( flags & 0x02 ) setStateFlag( PlayerStateFlag::WatchingCutscene ); @@ -92,7 +92,7 @@ void Core::Entity::Player::directorPlayScene( uint32_t eventId, uint32_t scene, pEvent->setPlayedScene( true ); pEvent->setEventReturnCallback( nullptr ); DirectorPlayScenePacket eventPlay( getId(), getId(), pEvent->getId(), - scene, flags, eventParam2, eventParam3 ); + scene, flags, eventParam3, eventParam4, eventParam5 ); queuePacket( eventPlay ); } diff --git a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp index 3696eda4..7cde49b0 100644 --- a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp @@ -830,6 +830,14 @@ void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, bo player.sendDebug( "evt end" ); instance->endEventCutscene(); } + else if( subCommand == "bgm" ) + { + uint16_t bgmId; + sscanf( params.c_str(), "%hd", &bgmId ); + + if( auto instance = player.getCurrentInstance() ) + instance->setCurrentBGM( bgmId ); + } else { player.sendDebug( "Unknown sub command." ); diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index 2948b523..5592cd9a 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -38,7 +38,8 @@ Core::InstanceContent::InstanceContent( boost::shared_ptr< Core::Data::InstanceC m_instanceContentId( instanceContentId ), m_state( Created ), m_pEntranceEObj( nullptr ), - m_instanceCommenceTime( 0 ) + m_instanceCommenceTime( 0 ), + m_currentBgm( pInstanceContent->bGM ) { } @@ -385,8 +386,20 @@ void Core::InstanceContent::onEnterTerritory( Entity::Player& player, uint32_t e player.directorPlayScene( getDirectorId(), 1, NO_DEFAULT_CAMERA | CONDITION_CUTSCENE | SILENT_ENTER_TERRI_ENV | HIDE_HOTBAR | SILENT_ENTER_TERRI_BGM | SILENT_ENTER_TERRI_SE | DISABLE_STEALTH | 0x00100000 | LOCK_HUD | LOCK_HOTBAR | // todo: wtf is 0x00100000 - DISABLE_CANCEL_EMOTE, 0, 0x9 ); + DISABLE_CANCEL_EMOTE, 0, 0x9, getCurrentBGM() ); } else - player.directorPlayScene( getDirectorId(), 2, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 0x9 ); + player.directorPlayScene( getDirectorId(), 2, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 0x9, getCurrentBGM() ); } + +void Core::InstanceContent::setCurrentBGM( uint16_t bgmIndex ) +{ + m_currentBgm = bgmIndex; + + // todo: actrl a1 does not override whatever is set with directorplayscene, need to figure out the magic behind it +} + +uint16_t Core::InstanceContent::getCurrentBGM() const +{ + return m_currentBgm; +} \ No newline at end of file diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.h b/src/servers/sapphire_zone/Zone/InstanceContent.h index 734eed7c..4096018d 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.h +++ b/src/servers/sapphire_zone/Zone/InstanceContent.h @@ -50,6 +50,11 @@ public: void startEventCutscene(); void endEventCutscene(); + /*! set the current bgm index (inside bgm.exd) */ + void setCurrentBGM( uint16_t bgmIndex ); + /*! get the currently playing bgm index */ + uint16_t getCurrentBGM() const; + bool hasPlayerPreviouslySpawned( Entity::Player &player ) const; InstanceContentState getState() const; @@ -66,6 +71,7 @@ private: boost::shared_ptr< Core::Data::InstanceContent > m_instanceContentInfo; uint32_t m_instanceContentId; InstanceContentState m_state; + uint16_t m_currentBgm; int64_t m_instanceExpireTime; int64_t m_instanceCommenceTime;