diff --git a/src/common/Common.h b/src/common/Common.h index 8feeab1c..7a69f5c4 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -1148,6 +1148,13 @@ namespace Sapphire::Common Ruby = 3, }; + enum class BrdSong : uint8_t + { + Mage = 5, + Army = 0x0A, + Wanderer = 0x0F, + }; + union JobGauge { struct @@ -1171,6 +1178,13 @@ namespace Sapphire::Common uint8_t enochainState; } blm; struct + { + uint16_t songTimer; + uint8_t songStacks; + uint8_t unused; + BrdSong song; + } brd; + struct { uint8_t feathers; uint8_t esprit; @@ -1186,13 +1200,16 @@ namespace Sapphire::Common struct { uint8_t blood; + uint8_t unused; uint16_t darksideTimer; uint8_t darkArts; + uint8_t unused2; uint16_t shadowTimer; } drk; struct { uint8_t ammo; + uint8_t unused; uint16_t maxTimerDuration; // what is this? uint8_t ammoComboStep; } gnb; @@ -1208,6 +1225,7 @@ namespace Sapphire::Common struct { uint8_t greasedLightningTimer; + uint8_t unused; uint8_t greasedLightningStacks; uint8_t chakra; uint8_t greasedLightningTimerFreezed; @@ -1241,7 +1259,7 @@ namespace Sapphire::Common uint16_t unused; uint8_t aetherflowStacks; uint8_t fairyGauge; - uint8_t seraphTimer; + uint16_t seraphTimer; SchDismissedFairy dismissedFairy; } sch; struct diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index b15995a0..02b7f168 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -2260,6 +2260,12 @@ void Sapphire::Entity::Player::sendActorGauge() queuePacket( pPacket ); } +void Sapphire::Entity::Player::gaugeSetRaw( uint8_t* pData ) +{ + std::memcpy( &m_gauge, pData, 15 ); + sendActorGauge(); +} + void Sapphire::Entity::Player::gaugeWarSetIb( uint8_t value ) { assert( value >= 0 && value <= 100 ); diff --git a/src/world/Actor/Player.h b/src/world/Actor/Player.h index a3da8781..b8ca50e5 100644 --- a/src/world/Actor/Player.h +++ b/src/world/Actor/Player.h @@ -975,6 +975,7 @@ namespace Sapphire::Entity ////////////////////////////////////////////////////////////////////////////////////////////////////// void gaugeClear(); void sendActorGauge(); + void gaugeSetRaw( uint8_t* pData ); void gaugeWarSetIb( uint8_t value ); uint8_t gaugeWarGetIb(); diff --git a/src/world/Manager/DebugCommandMgr.cpp b/src/world/Manager/DebugCommandMgr.cpp index 142c838c..62484e7e 100644 --- a/src/world/Manager/DebugCommandMgr.cpp +++ b/src/world/Manager/DebugCommandMgr.cpp @@ -361,6 +361,15 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& } } } + else if( subCommand == "gauge" ) + { + uint8_t values[15]; + std::memset( values, 0, sizeof( values ) ); + sscanf( params.c_str(), "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", + &values[0], &values[1], &values[2], &values[3], &values[4], &values[5], &values[6], &values[7], &values[8], + &values[9], &values[10], &values[11], &values[12], &values[13], &values[14] ); + player.gaugeSetRaw( values ); + } else if( subCommand == "visual" ) { int32_t id;