1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-25 05:57:45 +00:00

prototype achievement history;

This commit is contained in:
Alice Ogeda 2023-01-23 22:58:07 -03:00
parent 9b6d24d610
commit e36cdadb58
4 changed files with 19 additions and 1 deletions

View file

@ -1323,6 +1323,11 @@ Player::AchievementDataList& Player::getAchievementDataList()
return m_achievementData;
}
Player::AchievementHistory& Player::getAchievementHistory()
{
return m_achievementHistory;
}
void Player::setMaxGearSets( uint8_t amount )
{
if( amount == 1 )

View file

@ -27,6 +27,7 @@ namespace Sapphire::Entity
public:
using AchievementDataList = std::map< uint32_t, uint32_t >;
using AchievementList = std::array< uint8_t, 2048 / 8 >; // up to 2048 achievements
using AchievementHistory = std::array< uint16_t, 5 >;
using TitleList = std::array< uint8_t, 48 >;
using HowToList = std::array< uint8_t, 34 >;
using MinionList = std::array< uint8_t, 40 >;
@ -373,6 +374,9 @@ namespace Sapphire::Entity
/*! get player's achievement data list */
AchievementDataList& getAchievementDataList();
/*! get player's achievement data history */
AchievementHistory& getAchievementHistory();
/*! set number of gear sets */
void setMaxGearSets( uint8_t amount );
@ -870,6 +874,7 @@ namespace Sapphire::Entity
AchievementList m_achievementList{};
AchievementDataList m_achievementData{};
AchievementHistory m_achievementHistory{};
uint16_t m_activeTitle{};
TitleList m_titleList{};
HowToList m_howTo{};

View file

@ -57,6 +57,13 @@ void AchievementMgr::unlockAchievement( Entity::Player& player, uint32_t achieve
player.getAchievementList()[ index ] |= value;
// handle player achievement history
// todo: verify retail behavior due to client copying the last achievement unlocked
/* auto& achvHistory = player.getAchievementHistory();
std::rotate( achvHistory.rbegin(), achvHistory.rbegin() + 1, achvHistory.rend() );
achvHistory[ 0 ] = achievementId;*/
// fire packets
Common::Service< World::Manager::PlayerMgr >::ref().onUnlockAchievement( player, achievementId );

View file

@ -79,7 +79,8 @@ void PlayerMgr::onSendAchievementList( Entity::Player& player )
auto& server = Common::Service< World::WorldServer >::ref();
auto achvPacket = makeZonePacket< FFXIVIpcAchievement >( player.getId() );
std::memcpy( &achvPacket->data().complete[ 0 ], &player.getAchievementList()[ 0 ], sizeof( &achvPacket->data().complete ) );
std::memcpy( &achvPacket->data().complete[ 0 ], &player.getAchievementList()[ 0 ], sizeof( achvPacket->data().complete ) );
std::memcpy( &achvPacket->data().history[ 0 ], &player.getAchievementHistory()[ 0 ], sizeof( achvPacket->data().history ) );
server.queueForPlayer( player.getCharacterId(), achvPacket );
}