WIP saving quest items and active tasks

This commit is contained in:
kamilprzyb
2020-09-15 00:45:55 +02:00
parent b35f1a48c0
commit 6e1a4e2ea7
2 changed files with 81 additions and 2 deletions

View File

@@ -54,7 +54,9 @@ auto db = make_storage("database.db",
make_column("Quests", &Database::DbPlayer::QuestFlag),
make_column("BatteryW", &Database::DbPlayer::BatteryW),
make_column("BatteryN", &Database::DbPlayer::BatteryN),
make_column("Mentor", &Database::DbPlayer::Mentor)
make_column("Mentor", &Database::DbPlayer::Mentor),
make_column("ActiveTasks", &Database::DbPlayer::ActiveTasks),
make_column("QuestItems", &Database::DbPlayer::QuestItems)
),
make_table("Inventory",
make_column("PlayerId", &Database::Inventory::playerId),
@@ -327,13 +329,20 @@ Database::DbPlayer Database::playerToDb(Player *player)
result.BatteryW = player->batteryW;
result.Mentor = player->mentor;
// quests: parsing to blob
// finished quests: parsing to blob
result.QuestFlag = std::vector<char>();
for (int i=0; i<16; i++)
{
int64_t flag = player->aQuestFlag[i];
appendBlob(&result.QuestFlag, flag);
}
// quest items: parsing to blob;
result.QuestItems = std::vector<char>();
for (int i = 0; i < AQINVEN_COUNT; i++) {
sItemBase item = player->QInven[i];
appendBlob(&result.QuestItems, item);
}
return result;
}
@@ -390,6 +399,16 @@ Player Database::DbToPlayer(DbPlayer player) {
//move iterator to the next flag
it += 8;
}
it = player.QuestItems.begin();
for (int i = 0; i < AQINVEN_COUNT; i++)
{
if (it == player.QuestItems.end())
break;
result.QInven[i] = blobToItemBase(it);
//move iterator to the next flag
it += 10;
}
return result;
}
@@ -549,6 +568,25 @@ void Database::appendBlob(std::vector<char>* blob, int16_t input) {
}
}
void Database::appendBlob(std::vector<char>* blob, sItemBase item) {
appendBlob(blob, item.iID);
appendBlob(blob, item.iType);
appendBlob(blob, item.iOpt);
appendBlob(blob, item.iTimeLimit);
}
void Database::appendBlob(std::vector<char>* blob, sRunningQuest quest) {
appendBlob(blob, quest.m_aCurrTaskID);
for (int i = 0; i < 3; i++)
appendBlob(blob, quest.m_aKillNPCCount[i]);
for (int i = 0; i < 3; i++)
appendBlob(blob, quest.m_aKillNPCID[i]);
for (int i = 0; i < 3; i++)
appendBlob(blob, quest.m_aNeededItemCount[i]);
for (int i = 0; i < 3; i++)
appendBlob(blob, quest.m_aNeededItemID[i]);
}
int64_t Database::blobToInt64(std::vector<char>::iterator it) {
int64_t result = 0;
for (int i = 0; i < 8; i++) {
@@ -579,4 +617,39 @@ int16_t Database::blobToInt16(std::vector<char>::iterator it) {
return result;
}
sItemBase Database::blobToItemBase(std::vector<char>::iterator it) {
sItemBase result = {};
result.iID = blobToInt16(it);
it += 2;
result.iOpt = blobToInt32(it);
it += 4;
result.iTimeLimit = blobToInt32(it);
it += 4;
result.iType = blobToInt16(it);
return result;
}
sRunningQuest Database::blobToRunningQuest(std::vector<char>::iterator it) {
sRunningQuest result = {};
result.m_aCurrTaskID = blobToInt32(it);
it += 4;
for (int i = 0; i < 3; i++) {
result.m_aKillNPCCount[i] = blobToInt32(it);
it += 4;
}
for (int i = 0; i < 3; i++) {
result.m_aKillNPCID[i] = blobToInt32(it);
it += 4;
}
for (int i = 0; i < 3; i++) {
result.m_aNeededItemCount[i] = blobToInt32(it);
it += 4;
}
for (int i = 0; i < 3; i++) {
result.m_aNeededItemID[i] = blobToInt32(it);
it += 4;
}
return result;
}
#pragma endregion parsingBlobs

View File

@@ -66,6 +66,8 @@ namespace Database {
int BatteryN;
int16_t Mentor;
std::vector<char> QuestFlag;
std::vector<char> ActiveTasks;
std::vector<char> QuestItems;
};
@@ -115,7 +117,11 @@ namespace Database {
void appendBlob(std::vector<char>*blob, int64_t input);
void appendBlob(std::vector<char>* blob, int32_t input);
void appendBlob(std::vector<char>* blob, int16_t input);
void appendBlob(std::vector<char>* blob, sItemBase item);
void appendBlob(std::vector<char>* blob, sRunningQuest quest);
int64_t blobToInt64(std::vector<char>::iterator it);
int32_t blobToInt32(std::vector<char>::iterator it);
int16_t blobToInt16(std::vector<char>::iterator it);
sItemBase blobToItemBase(std::vector<char>::iterator it);
sRunningQuest blobToRunningQuest(std::vector<char>::iterator it);
}