mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-26 14:37:44 +00:00
Merge pull request #189 from goaaats/work
* Orchestrion + Mount SQL loading/saving
This commit is contained in:
commit
0a0304d157
6 changed files with 45 additions and 27 deletions
|
@ -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 );
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -153,6 +153,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
|
||||||
|
|
|
@ -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 ) );
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue