mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-25 14:07:46 +00:00
prototype achievement history;
This commit is contained in:
parent
9b6d24d610
commit
e36cdadb58
4 changed files with 19 additions and 1 deletions
|
@ -1323,6 +1323,11 @@ Player::AchievementDataList& Player::getAchievementDataList()
|
||||||
return m_achievementData;
|
return m_achievementData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Player::AchievementHistory& Player::getAchievementHistory()
|
||||||
|
{
|
||||||
|
return m_achievementHistory;
|
||||||
|
}
|
||||||
|
|
||||||
void Player::setMaxGearSets( uint8_t amount )
|
void Player::setMaxGearSets( uint8_t amount )
|
||||||
{
|
{
|
||||||
if( amount == 1 )
|
if( amount == 1 )
|
||||||
|
|
|
@ -27,6 +27,7 @@ namespace Sapphire::Entity
|
||||||
public:
|
public:
|
||||||
using AchievementDataList = std::map< uint32_t, uint32_t >;
|
using AchievementDataList = std::map< uint32_t, uint32_t >;
|
||||||
using AchievementList = std::array< uint8_t, 2048 / 8 >; // up to 2048 achievements
|
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 TitleList = std::array< uint8_t, 48 >;
|
||||||
using HowToList = std::array< uint8_t, 34 >;
|
using HowToList = std::array< uint8_t, 34 >;
|
||||||
using MinionList = std::array< uint8_t, 40 >;
|
using MinionList = std::array< uint8_t, 40 >;
|
||||||
|
@ -373,6 +374,9 @@ namespace Sapphire::Entity
|
||||||
/*! get player's achievement data list */
|
/*! get player's achievement data list */
|
||||||
AchievementDataList& getAchievementDataList();
|
AchievementDataList& getAchievementDataList();
|
||||||
|
|
||||||
|
/*! get player's achievement data history */
|
||||||
|
AchievementHistory& getAchievementHistory();
|
||||||
|
|
||||||
/*! set number of gear sets */
|
/*! set number of gear sets */
|
||||||
void setMaxGearSets( uint8_t amount );
|
void setMaxGearSets( uint8_t amount );
|
||||||
|
|
||||||
|
@ -870,6 +874,7 @@ namespace Sapphire::Entity
|
||||||
|
|
||||||
AchievementList m_achievementList{};
|
AchievementList m_achievementList{};
|
||||||
AchievementDataList m_achievementData{};
|
AchievementDataList m_achievementData{};
|
||||||
|
AchievementHistory m_achievementHistory{};
|
||||||
uint16_t m_activeTitle{};
|
uint16_t m_activeTitle{};
|
||||||
TitleList m_titleList{};
|
TitleList m_titleList{};
|
||||||
HowToList m_howTo{};
|
HowToList m_howTo{};
|
||||||
|
|
|
@ -57,6 +57,13 @@ void AchievementMgr::unlockAchievement( Entity::Player& player, uint32_t achieve
|
||||||
|
|
||||||
player.getAchievementList()[ index ] |= value;
|
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
|
// fire packets
|
||||||
Common::Service< World::Manager::PlayerMgr >::ref().onUnlockAchievement( player, achievementId );
|
Common::Service< World::Manager::PlayerMgr >::ref().onUnlockAchievement( player, achievementId );
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,8 @@ void PlayerMgr::onSendAchievementList( Entity::Player& player )
|
||||||
auto& server = Common::Service< World::WorldServer >::ref();
|
auto& server = Common::Service< World::WorldServer >::ref();
|
||||||
|
|
||||||
auto achvPacket = makeZonePacket< FFXIVIpcAchievement >( player.getId() );
|
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 );
|
server.queueForPlayer( player.getCharacterId(), achvPacket );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue