1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 06:27:45 +00:00

Merge pull request #189 from goaaats/work

* Orchestrion + Mount SQL loading/saving
This commit is contained in:
Mordred 2017-12-03 18:13:21 +01:00 committed by GitHub
commit 0a0304d157
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 45 additions and 27 deletions

View file

@ -27,7 +27,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements()
"OTerritoryType, OTerritoryId, OPosX, OPosY, OPosZ, OPosR, GuardianDeity, " "OTerritoryType, OTerritoryId, OPosX, OPosY, OPosZ, OPosR, GuardianDeity, "
"BirthDay, BirthMonth, Class, Status, TotalPlayTime, FirstClass, HomePoint, " "BirthDay, BirthMonth, Class, Status, TotalPlayTime, FirstClass, HomePoint, "
"FavoritePoint, RestPoint, StartTown, ActiveTitle, TitleList, Achievement, " "FavoritePoint, RestPoint, StartTown, ActiveTitle, TitleList, Achievement, "
"Aetheryte, HowTo, Minions, Mounts, EquippedMannequin, ConfigFlags, " "Aetheryte, HowTo, Minions, Mounts, Orchestrion, EquippedMannequin, ConfigFlags, "
"QuestCompleteFlags, OpeningSequence, QuestTracking, GrandCompany, " "QuestCompleteFlags, OpeningSequence, QuestTracking, GrandCompany, "
"GrandCompanyRank, Discovery, GMRank, Unlocks, CFPenaltyUntil " "GrandCompanyRank, Discovery, GMRank, Unlocks, CFPenaltyUntil "
"FROM charainfo WHERE CharacterId = ?;", CONNECTION_SYNC ); "FROM charainfo WHERE CharacterId = ?;", CONNECTION_SYNC );
@ -41,7 +41,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements()
"TerritoryType = ?, TerritoryId = ?, PosX = ?, PosY = ?, PosZ = ?, PosR = ?, " "TerritoryType = ?, TerritoryId = ?, PosX = ?, PosY = ?, PosZ = ?, PosR = ?, "
"OTerritoryType = ?, OTerritoryId = ?, OPosX = ?, OPosY = ?, OPosZ = ?, OPosR = ?, " "OTerritoryType = ?, OTerritoryId = ?, OPosX = ?, OPosY = ?, OPosZ = ?, OPosR = ?, "
"Class = ?, Status = ?, TotalPlayTime = ?, HomePoint = ?, FavoritePoint = ?, RestPoint = ?, " "Class = ?, Status = ?, TotalPlayTime = ?, HomePoint = ?, FavoritePoint = ?, RestPoint = ?, "
"ActiveTitle = ?, TitleList = ?, Achievement = ?, Aetheryte = ?, HowTo = ?, Minions = ?, Mounts = ?, " "ActiveTitle = ?, TitleList = ?, Achievement = ?, Aetheryte = ?, HowTo = ?, Minions = ?, Mounts = ?, Orchestrion = ?, "
"EquippedMannequin = ?, ConfigFlags = ?, QuestCompleteFlags = ?, OpeningSequence = ?, " "EquippedMannequin = ?, ConfigFlags = ?, QuestCompleteFlags = ?, OpeningSequence = ?, "
"QuestTracking = ?, GrandCompany = ?, GrandCompanyRank = ?, Discovery = ?, GMRank = ?, Unlocks = ?, " "QuestTracking = ?, GrandCompany = ?, GrandCompanyRank = ?, Discovery = ?, GMRank = ?, Unlocks = ?, "
"CFPenaltyUntil = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); "CFPenaltyUntil = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
@ -55,8 +55,8 @@ void Core::Db::CharaDbConnection::doPrepareStatements()
"Customize, Voice, IsNewGame, TerritoryId, PosX, PosY, PosZ, PosR, ModelEquip, " "Customize, Voice, IsNewGame, TerritoryId, PosX, PosY, PosZ, PosR, ModelEquip, "
"IsNewAdventurer, GuardianDeity, Birthday, BirthMonth, Class, Status, FirstClass, " "IsNewAdventurer, GuardianDeity, Birthday, BirthMonth, Class, Status, FirstClass, "
"HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, " "HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, "
"Aetheryte, GMRank, UPDATE_DATE ) " "Aetheryte, GMRank, Mounts, Orchestrion, UPDATE_DATE ) "
"VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() );", "VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() );",
CONNECTION_SYNC ); CONNECTION_SYNC );
prepareStatement( CHARA_UP_NAME, "UPDATE charainfo SET Name = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_NAME, "UPDATE charainfo SET Name = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );

View file

@ -153,6 +153,8 @@ namespace Core {
std::vector< uint8_t > discovery( 411 ); std::vector< uint8_t > discovery( 411 );
std::vector< uint8_t > questComplete( 200 ); std::vector< uint8_t > questComplete( 200 );
std::vector< uint8_t > unlocks( 64 ); std::vector< uint8_t > unlocks( 64 );
std::vector< uint8_t > mountGuide( 13 );
std::vector< uint8_t > orchestrion( 38 );
std::vector< uint8_t > modelEquip( 40 ); std::vector< uint8_t > modelEquip( 40 );
std::vector< uint8_t > questTracking8( 10 ); std::vector< uint8_t > questTracking8( 10 );
std::vector< int16_t > questTracking = { -1, -1, -1, -1, -1 }; std::vector< int16_t > questTracking = { -1, -1, -1, -1, -1 };
@ -255,6 +257,8 @@ namespace Core {
stmt->setBinary( 29, questTracking8 ); stmt->setBinary( 29, questTracking8 );
stmt->setBinary( 30, aetherytes ); stmt->setBinary( 30, aetherytes );
stmt->setInt( 31, m_gmRank ); stmt->setInt( 31, m_gmRank );
stmt->setBinary( 32, mountGuide );
stmt->setBinary( 33, orchestrion );
g_charaDb.directExecute( stmt ); g_charaDb.directExecute( stmt );
auto stmtSearchInfo = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_SEARCHINFO_INS ); auto stmtSearchInfo = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_SEARCHINFO_INS );

View file

@ -1183,6 +1183,11 @@ const uint8_t * Core::Entity::Player::getOrchestrionBitmask() const
return m_orchestrion; return m_orchestrion;
} }
const uint8_t * Core::Entity::Player::getMountGuideBitmask() const
{
return m_mountGuide;
}
uint64_t Core::Entity::Player::getContentId() const uint64_t Core::Entity::Player::getContentId() const
{ {
return m_contentId; return m_contentId;

View file

@ -387,6 +387,8 @@ public:
const uint8_t* getUnlockBitmask() const; const uint8_t* getUnlockBitmask() const;
/*! return a const pointer to the orchestrion bitmask array */ /*! return a const pointer to the orchestrion bitmask array */
const uint8_t* getOrchestrionBitmask() const; const uint8_t* getOrchestrionBitmask() const;
/*! return a const pointer to the mount guide bitmask array */
const uint8_t* getMountGuideBitmask() const;
// Spawn handling // Spawn handling
@ -574,7 +576,7 @@ private:
uint8_t m_titleList[48]; uint8_t m_titleList[48];
uint8_t m_howTo[33]; uint8_t m_howTo[33];
uint8_t m_minions[33]; uint8_t m_minions[33];
uint8_t m_mounts[13]; uint8_t m_mountGuide[13];
uint8_t m_homePoint; uint8_t m_homePoint;
uint8_t m_startTown; uint8_t m_startTown;
uint16_t m_townWarpFstFlags; uint16_t m_townWarpFstFlags;

View file

@ -152,6 +152,12 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession )
auto titleList = res->getBlobVector( "TitleList" ); auto titleList = res->getBlobVector( "TitleList" );
memcpy( reinterpret_cast< char* >( m_titleList ), titleList.data(), titleList.size() ); memcpy( reinterpret_cast< char* >( m_titleList ), titleList.data(), titleList.size() );
auto mountGuide = res->getBlobVector( "Mounts" );
memcpy( reinterpret_cast< char* >( m_mountGuide ), mountGuide.data(), mountGuide.size() );
auto orchestrion = res->getBlobVector( "Orchestrion" );
memcpy( reinterpret_cast< char* >( m_orchestrion ), orchestrion.data(), orchestrion.size() );
auto gcRank = res->getBlobVector( "GrandCompanyRank" ); auto gcRank = res->getBlobVector( "GrandCompanyRank" );
memcpy( reinterpret_cast< char* >( m_gcRank ), gcRank.data(), gcRank.size() ); memcpy( reinterpret_cast< char* >( m_gcRank ), gcRank.data(), gcRank.size() );
@ -296,10 +302,10 @@ void Core::Entity::Player::updateSql()
"TerritoryType 18, TerritoryId 19, PosX 20, PosY 21, PosZ 22, PosR 23, " "TerritoryType 18, TerritoryId 19, PosX 20, PosY 21, PosZ 22, PosR 23, "
"OTerritoryType 24, OTerritoryId 25, OPosX 26, OPosY 27, OPosZ 28, OPosR 29, " "OTerritoryType 24, OTerritoryId 25, OPosX 26, OPosY 27, OPosZ 28, OPosR 29, "
"Class 30, Status 31, TotalPlayTime 32, HomePoint 33, FavoritePoint 34, RestPoint 35, " "Class 30, Status 31, TotalPlayTime 32, HomePoint 33, FavoritePoint 34, RestPoint 35, "
"ActiveTitle 36, TitleList 37, Achievement 38, Aetheryte 39, HowTo 40, Minions 41, Mounts 42, " "ActiveTitle 36, TitleList 37, Achievement 38, Aetheryte 39, HowTo 40, Minions 41, Mounts 42, Orchestrion 43, "
"EquippedMannequin 43, ConfigFlags 44, QuestCompleteFlags 45, OpeningSequence 46, " "EquippedMannequin 44, ConfigFlags 45, QuestCompleteFlags 46, OpeningSequence 47, "
"QuestTracking 47, GrandCompany 48, GrandCompanyRank 49, Discovery 50, GMRank 51, Unlocks 52, " "QuestTracking 48, GrandCompany 49, GrandCompanyRank 50, Discovery 51, GMRank 52, Unlocks 53, "
"CFPenaltyUntil 53"*/ "CFPenaltyUntil 54"*/
auto stmt = g_charaDb.getPreparedStatement( Core::Db::CharaDbStatements::CHARA_UP ); auto stmt = g_charaDb.getPreparedStatement( Core::Db::CharaDbStatements::CHARA_UP );
stmt->setInt( 1, getHp() ); stmt->setInt( 1, getHp() );
@ -370,40 +376,44 @@ void Core::Entity::Player::updateSql()
memcpy( minionsVec.data(), m_minions, sizeof( m_minions ) ); memcpy( minionsVec.data(), m_minions, sizeof( m_minions ) );
stmt->setBinary( 41, minionsVec ); stmt->setBinary( 41, minionsVec );
std::vector< uint8_t > mountsVec( sizeof( m_mounts ) ); std::vector< uint8_t > mountsVec( sizeof( m_mountGuide ) );
memcpy( mountsVec.data(), m_mounts, sizeof( m_mounts ) ); memcpy( mountsVec.data(), m_mountGuide, sizeof( m_mountGuide ) );
stmt->setBinary( 42, mountsVec ); stmt->setBinary( 42, mountsVec );
stmt->setInt( 43, 0 ); // EquippedMannequin std::vector< uint8_t > orchestrionVec( sizeof( m_orchestrion ) );
memcpy( orchestrionVec.data(), m_orchestrion, sizeof( m_orchestrion ) );
stmt->setBinary( 42, mountsVec );
stmt->setInt( 44, 0 ); // DisplayFlags stmt->setInt( 44, 0 ); // EquippedMannequin
stmt->setInt( 45, 0 ); // DisplayFlags
std::vector< uint8_t > questCompleteVec( sizeof( m_questCompleteFlags ) ); std::vector< uint8_t > questCompleteVec( sizeof( m_questCompleteFlags ) );
memcpy( questCompleteVec.data(), m_questCompleteFlags, sizeof( m_questCompleteFlags ) ); memcpy( questCompleteVec.data(), m_questCompleteFlags, sizeof( m_questCompleteFlags ) );
stmt->setBinary( 45, questCompleteVec ); stmt->setBinary( 46, questCompleteVec );
stmt->setInt( 46, m_openingSequence ); stmt->setInt( 47, m_openingSequence );
std::vector< uint8_t > questTrackerVec( sizeof( m_questTracking ) ); std::vector< uint8_t > questTrackerVec( sizeof( m_questTracking ) );
memcpy( questTrackerVec.data(), m_questTracking, sizeof( m_questTracking ) ); memcpy( questTrackerVec.data(), m_questTracking, sizeof( m_questTracking ) );
stmt->setBinary( 47, questTrackerVec ); stmt->setBinary( 48, questTrackerVec );
stmt->setInt( 48, m_gc ); // DisplayFlags stmt->setInt( 49, m_gc ); // DisplayFlags
stmt->setBinary( 49, { m_gcRank[0], m_gcRank[1], m_gcRank[2] } ); stmt->setBinary( 50, { m_gcRank[0], m_gcRank[1], m_gcRank[2] } );
std::vector< uint8_t > discoveryVec( sizeof( m_discovery ) ); std::vector< uint8_t > discoveryVec( sizeof( m_discovery ) );
memcpy( discoveryVec.data(), m_discovery, sizeof( m_discovery ) ); memcpy( discoveryVec.data(), m_discovery, sizeof( m_discovery ) );
stmt->setBinary( 50, discoveryVec ); stmt->setBinary( 51, discoveryVec );
stmt->setInt( 51, m_gmRank ); stmt->setInt( 52, m_gmRank );
std::vector< uint8_t > unlockVec( sizeof( m_unlocks ) ); std::vector< uint8_t > unlockVec( sizeof( m_unlocks ) );
memcpy( unlockVec.data(), m_unlocks, sizeof( m_unlocks ) ); memcpy( unlockVec.data(), m_unlocks, sizeof( m_unlocks ) );
stmt->setBinary( 52, unlockVec ); stmt->setBinary( 53, unlockVec );
stmt->setInt( 53, m_cfPenaltyUntil ); stmt->setInt( 54, m_cfPenaltyUntil );
stmt->setInt( 54, m_id ); stmt->setInt( 55, m_id );
g_charaDb.execute( stmt ); g_charaDb.execute( stmt );
@ -416,8 +426,6 @@ void Core::Entity::Player::updateSql()
////// Class ////// Class
updateDbClass(); updateDbClass();
memset( m_orchestrion, 0, sizeof( m_orchestrion ) );
} }
void Core::Entity::Player::updateDbClass() const void Core::Entity::Player::updateDbClass() const

View file

@ -64,8 +64,7 @@ private:
memcpy( m_data.orchestrionMask, player->getOrchestrionBitmask(), sizeof( m_data.orchestrionMask ) ); memcpy( m_data.orchestrionMask, player->getOrchestrionBitmask(), sizeof( m_data.orchestrionMask ) );
memset( m_data.mountGuideMask, 0xFF, sizeof( m_data.mountGuideMask) ); memcpy( m_data.mountGuideMask, player->getMountGuideBitmask(), sizeof( m_data.mountGuideMask) );
memset( m_data.fishingGuideMask, 0xFF, sizeof( m_data.fishingGuideMask ) );
memcpy( m_data.unlockBitmask, player->getUnlockBitmask(), sizeof( m_data.unlockBitmask ) ); memcpy( m_data.unlockBitmask, player->getUnlockBitmask(), sizeof( m_data.unlockBitmask ) );