From 7a0d932f82a69d2fd7c3cb39cd22a497c787bab0 Mon Sep 17 00:00:00 2001 From: goaaats Date: Sun, 3 Dec 2017 17:24:11 +0100 Subject: [PATCH] * Orchestrion + Mount SQL loading/saving --- .../Database/CharaDbConnection.cpp | 8 ++-- src/servers/Server_REST/PlayerMinimal.cpp | 4 ++ src/servers/Server_Zone/Actor/Player.cpp | 5 ++ src/servers/Server_Zone/Actor/Player.h | 4 +- src/servers/Server_Zone/Actor/PlayerSql.cpp | 48 +++++++++++-------- .../Network/PacketWrappers/InitUIPacket.h | 3 +- 6 files changed, 45 insertions(+), 27 deletions(-) diff --git a/src/servers/Server_Common/Database/CharaDbConnection.cpp b/src/servers/Server_Common/Database/CharaDbConnection.cpp index 7ed7aada..ce5a1a7e 100644 --- a/src/servers/Server_Common/Database/CharaDbConnection.cpp +++ b/src/servers/Server_Common/Database/CharaDbConnection.cpp @@ -27,7 +27,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements() "OTerritoryType, OTerritoryId, OPosX, OPosY, OPosZ, OPosR, GuardianDeity, " "BirthDay, BirthMonth, Class, Status, TotalPlayTime, FirstClass, HomePoint, " "FavoritePoint, RestPoint, StartTown, ActiveTitle, TitleList, Achievement, " - "Aetheryte, HowTo, Minions, Mounts, EquippedMannequin, ConfigFlags, " + "Aetheryte, HowTo, Minions, Mounts, Orchestrion, EquippedMannequin, ConfigFlags, " "QuestCompleteFlags, OpeningSequence, QuestTracking, GrandCompany, " "GrandCompanyRank, Discovery, GMRank, Unlocks, CFPenaltyUntil " "FROM charainfo WHERE CharacterId = ?;", CONNECTION_SYNC ); @@ -41,7 +41,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements() "TerritoryType = ?, TerritoryId = ?, PosX = ?, PosY = ?, PosZ = ?, PosR = ?, " "OTerritoryType = ?, OTerritoryId = ?, OPosX = ?, OPosY = ?, OPosZ = ?, OPosR = ?, " "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 = ?, " "QuestTracking = ?, GrandCompany = ?, GrandCompanyRank = ?, Discovery = ?, GMRank = ?, Unlocks = ?, " "CFPenaltyUntil = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); @@ -55,8 +55,8 @@ void Core::Db::CharaDbConnection::doPrepareStatements() "Customize, Voice, IsNewGame, TerritoryId, PosX, PosY, PosZ, PosR, ModelEquip, " "IsNewAdventurer, GuardianDeity, Birthday, BirthMonth, Class, Status, FirstClass, " "HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, " - "Aetheryte, GMRank, UPDATE_DATE ) " - "VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() );", + "Aetheryte, GMRank, Mounts, Orchestrion, UPDATE_DATE ) " + "VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() );", CONNECTION_SYNC ); prepareStatement( CHARA_UP_NAME, "UPDATE charainfo SET Name = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); diff --git a/src/servers/Server_REST/PlayerMinimal.cpp b/src/servers/Server_REST/PlayerMinimal.cpp index 5ca8410a..724475b8 100644 --- a/src/servers/Server_REST/PlayerMinimal.cpp +++ b/src/servers/Server_REST/PlayerMinimal.cpp @@ -153,6 +153,8 @@ namespace Core { std::vector< uint8_t > discovery( 411 ); std::vector< uint8_t > questComplete( 200 ); 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 > questTracking8( 10 ); std::vector< int16_t > questTracking = { -1, -1, -1, -1, -1 }; @@ -255,6 +257,8 @@ namespace Core { stmt->setBinary( 29, questTracking8 ); stmt->setBinary( 30, aetherytes ); stmt->setInt( 31, m_gmRank ); + stmt->setBinary( 32, mountGuide ); + stmt->setBinary( 33, orchestrion ); g_charaDb.directExecute( stmt ); auto stmtSearchInfo = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_SEARCHINFO_INS ); diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index b2d5ce20..2caab4b3 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -1183,6 +1183,11 @@ const uint8_t * Core::Entity::Player::getOrchestrionBitmask() const return m_orchestrion; } +const uint8_t * Core::Entity::Player::getMountGuideBitmask() const +{ + return m_mountGuide; +} + uint64_t Core::Entity::Player::getContentId() const { return m_contentId; diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index a705e8b7..4688e5a5 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -387,6 +387,8 @@ public: const uint8_t* getUnlockBitmask() const; /*! return a const pointer to the orchestrion bitmask array */ const uint8_t* getOrchestrionBitmask() const; + /*! return a const pointer to the mount guide bitmask array */ + const uint8_t* getMountGuideBitmask() const; // Spawn handling @@ -574,7 +576,7 @@ private: uint8_t m_titleList[48]; uint8_t m_howTo[33]; uint8_t m_minions[33]; - uint8_t m_mounts[13]; + uint8_t m_mountGuide[13]; uint8_t m_homePoint; uint8_t m_startTown; uint16_t m_townWarpFstFlags; diff --git a/src/servers/Server_Zone/Actor/PlayerSql.cpp b/src/servers/Server_Zone/Actor/PlayerSql.cpp index 737c9754..46fdd8d8 100644 --- a/src/servers/Server_Zone/Actor/PlayerSql.cpp +++ b/src/servers/Server_Zone/Actor/PlayerSql.cpp @@ -152,6 +152,12 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession ) auto titleList = res->getBlobVector( "TitleList" ); 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" ); 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, " "OTerritoryType 24, OTerritoryId 25, OPosX 26, OPosY 27, OPosZ 28, OPosR 29, " "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, " - "EquippedMannequin 43, ConfigFlags 44, QuestCompleteFlags 45, OpeningSequence 46, " - "QuestTracking 47, GrandCompany 48, GrandCompanyRank 49, Discovery 50, GMRank 51, Unlocks 52, " - "CFPenaltyUntil 53"*/ + "ActiveTitle 36, TitleList 37, Achievement 38, Aetheryte 39, HowTo 40, Minions 41, Mounts 42, Orchestrion 43, " + "EquippedMannequin 44, ConfigFlags 45, QuestCompleteFlags 46, OpeningSequence 47, " + "QuestTracking 48, GrandCompany 49, GrandCompanyRank 50, Discovery 51, GMRank 52, Unlocks 53, " + "CFPenaltyUntil 54"*/ auto stmt = g_charaDb.getPreparedStatement( Core::Db::CharaDbStatements::CHARA_UP ); stmt->setInt( 1, getHp() ); @@ -370,40 +376,44 @@ void Core::Entity::Player::updateSql() memcpy( minionsVec.data(), m_minions, sizeof( m_minions ) ); stmt->setBinary( 41, minionsVec ); - std::vector< uint8_t > mountsVec( sizeof( m_mounts ) ); - memcpy( mountsVec.data(), m_mounts, sizeof( m_mounts ) ); + std::vector< uint8_t > mountsVec( sizeof( m_mountGuide ) ); + memcpy( mountsVec.data(), m_mountGuide, sizeof( m_mountGuide ) ); 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 ) ); 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 ) ); 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 ) ); 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 ) ); 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 ); @@ -416,8 +426,6 @@ void Core::Entity::Player::updateSql() ////// Class updateDbClass(); - memset( m_orchestrion, 0, sizeof( m_orchestrion ) ); - } void Core::Entity::Player::updateDbClass() const diff --git a/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h b/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h index aa3ad80b..13d48cc7 100644 --- a/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h +++ b/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h @@ -64,8 +64,7 @@ private: memcpy( m_data.orchestrionMask, player->getOrchestrionBitmask(), sizeof( m_data.orchestrionMask ) ); - memset( m_data.mountGuideMask, 0xFF, sizeof( m_data.mountGuideMask) ); - memset( m_data.fishingGuideMask, 0xFF, sizeof( m_data.fishingGuideMask ) ); + memcpy( m_data.mountGuideMask, player->getMountGuideBitmask(), sizeof( m_data.mountGuideMask) ); memcpy( m_data.unlockBitmask, player->getUnlockBitmask(), sizeof( m_data.unlockBitmask ) );