#include "CDLootMatrixTable.h" CDLootMatrix CDLootMatrixTable::ReadRow(CppSQLite3Query& tableData) const { CDLootMatrix entry{}; if (tableData.eof()) return entry; entry.LootTableIndex = tableData.getIntField("LootTableIndex", -1); entry.RarityTableIndex = tableData.getIntField("RarityTableIndex", -1); entry.percent = tableData.getFloatField("percent", -1.0f); entry.minToDrop = tableData.getIntField("minToDrop", -1); entry.maxToDrop = tableData.getIntField("maxToDrop", -1); entry.flagID = tableData.getIntField("flagID", -1); UNUSED(entry.gate_version = tableData.getStringField("gate_version", "")); return entry; } void CDLootMatrixTable::LoadValuesFromDatabase() { // First, get the size of the table uint32_t size = 0; auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM LootMatrix"); while (!tableSize.eof()) { size = tableSize.getIntField(0, 0); tableSize.nextRow(); } // Reserve the size auto& entries = GetEntriesMutable(); entries.reserve(size); // Now get the data auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM LootMatrix"); while (!tableData.eof()) { CDLootMatrix entry; uint32_t lootMatrixIndex = tableData.getIntField("LootMatrixIndex", -1); entries[lootMatrixIndex].push_back(ReadRow(tableData)); tableData.nextRow(); } } const LootMatrixEntries& CDLootMatrixTable::GetMatrix(uint32_t matrixId) { auto& entries = GetEntriesMutable(); auto itr = entries.find(matrixId); if (itr != entries.end()) { return itr->second; } auto query = CDClientDatabase::CreatePreppedStmt("SELECT * FROM LootMatrix where LootMatrixIndex = ?;"); query.bind(1, static_cast(matrixId)); auto tableData = query.execQuery(); while (!tableData.eof()) { entries[matrixId].push_back(ReadRow(tableData)); tableData.nextRow(); } return entries[matrixId]; }