mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-05-25 16:22:26 +00:00
Completely broken minor changes, just caching changes while moving machines
This commit is contained in:
parent
d61d3b0ce2
commit
44a5d83b1d
@ -90,6 +90,11 @@ public:
|
|||||||
|
|
||||||
// Mail Delete
|
// Mail Delete
|
||||||
virtual void DeleteMail(uint64_t id) = 0;
|
virtual void DeleteMail(uint64_t id) = 0;
|
||||||
|
|
||||||
|
// Property Get
|
||||||
|
virtual uint64_t GetPropertyFromTemplateAndClone(uint32_t templateId, uint32_t cloneId) = 0;
|
||||||
|
virtual std::vector<uint32_t> GetBBBModlesForProperty(uint32_t propertyId) = 0;
|
||||||
|
virtual std::istream GetLXFMLFromID(uint32_t id) = 0;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -102,7 +102,8 @@ std::unique_ptr<sql::PreparedStatement> MySQLDatabase::CreatePreppedStmtUnique(c
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<sql::ResultSet> MySQLDatabase::GetResultsOfStatement(sql::Statement* stmt) {
|
std::unique_ptr<sql::ResultSet> MySQLDatabase::GetResultsOfStatement(sql::Statement* stmt) {
|
||||||
std::unique_ptr<sql::ResultSet> result(stmt->executeQuery());
|
auto* res = stmt->executeQuery();
|
||||||
|
std::unique_ptr<sql::ResultSet> result(res);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -605,3 +606,46 @@ void MySQLDatabase::RemoveAttachmentFromMail(uint64_t id) {
|
|||||||
stmt->setUInt64(1, id);
|
stmt->setUInt64(1, id);
|
||||||
stmt->execute();
|
stmt->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t MySQLDatabase::GetPropertyFromTemplateAndClone(uint32_t templateId, uint32_t cloneId) {
|
||||||
|
auto stmt = CreatePreppedStmtUnique("SELECT id FROM properties WHERE template_id = ? AND clone_id = ? LIMIT 1;");
|
||||||
|
stmt->setUInt(1, templateId);
|
||||||
|
stmt->setUInt(2, cloneId);
|
||||||
|
|
||||||
|
auto res = GetResultsOfStatement(stmt.get());
|
||||||
|
|
||||||
|
while (res->next()) {
|
||||||
|
return res->getUInt64("id");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<uint32_t> MySQLDatabase::GetBBBModlesForProperty(uint32_t propertyId) {
|
||||||
|
auto stmt = CreatePreppedStmtUnique("SELECT ugc_id FROM properties_contents WHERE lot = 14 AND property_id = ?;");
|
||||||
|
stmt->setUInt(1, propertyId);
|
||||||
|
|
||||||
|
auto res = GetResultsOfStatement(stmt.get());
|
||||||
|
|
||||||
|
std::vector<uint32_t> models;
|
||||||
|
|
||||||
|
while (res->next()) {
|
||||||
|
models.push_back(res->getUInt("ugc_id"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return models;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::istream* MySQLDatabase::GetLXFMLFromID(uint32_t id) {
|
||||||
|
auto stmt = CreatePreppedStmtUnique("SELECT lxfml FROM ugc WHERE id = ? LIMIT 1;");
|
||||||
|
stmt->setUInt(1, id);
|
||||||
|
|
||||||
|
auto res = GetResultsOfStatement(stmt.get());
|
||||||
|
|
||||||
|
while (res->next()) {
|
||||||
|
std::istream* blob = res->getBlob("lxfml");
|
||||||
|
return blob;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new std::istream();
|
||||||
|
}
|
@ -83,6 +83,10 @@ public:
|
|||||||
void RemoveAttachmentFromMail(uint64_t id) override;
|
void RemoveAttachmentFromMail(uint64_t id) override;
|
||||||
|
|
||||||
void DeleteMail(uint64_t id) override;
|
void DeleteMail(uint64_t id) override;
|
||||||
|
|
||||||
|
uint64_t GetPropertyFromTemplateAndClone(uint32_t templateId, uint32_t cloneId) override;
|
||||||
|
std::vector<uint32_t> GetBBBModlesForProperty(uint32_t propertyId) override;
|
||||||
|
std::istream GetLXFMLFromID(uint32_t id) override;
|
||||||
private:
|
private:
|
||||||
std::string m_Host;
|
std::string m_Host;
|
||||||
std::string m_Database;
|
std::string m_Database;
|
||||||
|
@ -1061,35 +1061,19 @@ void HandlePacket(Packet* packet) {
|
|||||||
goto noBBB;
|
goto noBBB;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Check for BBB models:
|
uint64_t propertyId = Database::Connection->GetPropertyFromTemplateAndClone(result.getIntField(0), g_CloneID);
|
||||||
auto stmt = Database::CreatePreppedStmt("SELECT ugc_id FROM properties_contents WHERE lot=14 AND property_id=?");
|
|
||||||
|
|
||||||
int32_t templateId = result.getIntField(0);
|
|
||||||
|
|
||||||
result.finalize();
|
result.finalize();
|
||||||
|
|
||||||
auto* propertyLookup = Database::CreatePreppedStmt("SELECT * FROM properties WHERE template_id = ? AND clone_id = ?;");
|
// Check for BBB models
|
||||||
|
auto models = Database::Connection->GetBBBModlesForProperty(propertyId);
|
||||||
|
|
||||||
propertyLookup->setInt(1, templateId);
|
for (const auto& modelId : models) {
|
||||||
propertyLookup->setInt64(2, g_CloneID);
|
Game::logger->Log("UGC", "Getting lxfml ugcID: %u", modelId);
|
||||||
|
|
||||||
auto* propertyEntry = propertyLookup->executeQuery();
|
// Get lxfml data
|
||||||
uint64_t propertyId = 0;
|
|
||||||
|
|
||||||
if (propertyEntry->next()) {
|
|
||||||
propertyId = propertyEntry->getUInt64(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete propertyLookup;
|
|
||||||
|
|
||||||
stmt->setUInt64(1, propertyId);
|
|
||||||
auto res = stmt->executeQuery();
|
|
||||||
while (res->next()) {
|
|
||||||
Game::logger->Log("UGC", "Getting lxfml ugcID: %u", res->getUInt(1));
|
|
||||||
|
|
||||||
//Get lxfml:
|
|
||||||
auto stmtL = Database::CreatePreppedStmt("SELECT lxfml from ugc where id=?");
|
auto stmtL = Database::CreatePreppedStmt("SELECT lxfml from ugc where id=?");
|
||||||
stmtL->setUInt(1, res->getUInt(1));
|
stmtL->setUInt(1, modelId);
|
||||||
|
|
||||||
auto lxres = stmtL->executeQuery();
|
auto lxres = stmtL->executeQuery();
|
||||||
|
|
||||||
@ -1100,15 +1084,15 @@ void HandlePacket(Packet* packet) {
|
|||||||
size_t lxfmlSize = lxfml->tellg();
|
size_t lxfmlSize = lxfml->tellg();
|
||||||
lxfml->seekg(0);
|
lxfml->seekg(0);
|
||||||
|
|
||||||
//Send message:
|
// Send message
|
||||||
{
|
{
|
||||||
LWOOBJID blueprintID = res->getUInt(1);
|
LWOOBJID blueprintID = modelId;
|
||||||
GeneralUtils::SetBit(blueprintID, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(blueprintID, eObjectBits::CHARACTER);
|
||||||
GeneralUtils::SetBit(blueprintID, eObjectBits::PERSISTENT);
|
GeneralUtils::SetBit(blueprintID, eObjectBits::PERSISTENT);
|
||||||
|
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::BLUEPRINT_SAVE_RESPONSE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::BLUEPRINT_SAVE_RESPONSE);
|
||||||
bitStream.Write<LWOOBJID>(LWOOBJID_EMPTY); //always zero so that a check on the client passes
|
bitStream.Write<LWOOBJID>(LWOOBJID_EMPTY); // always zero so that a check on the client passes
|
||||||
bitStream.Write(eBlueprintSaveResponseType::EverythingWorked);
|
bitStream.Write(eBlueprintSaveResponseType::EverythingWorked);
|
||||||
bitStream.Write<uint32_t>(1);
|
bitStream.Write<uint32_t>(1);
|
||||||
bitStream.Write(blueprintID);
|
bitStream.Write(blueprintID);
|
||||||
@ -1120,7 +1104,7 @@ void HandlePacket(Packet* packet) {
|
|||||||
|
|
||||||
SystemAddress sysAddr = packet->systemAddress;
|
SystemAddress sysAddr = packet->systemAddress;
|
||||||
SEND_PACKET;
|
SEND_PACKET;
|
||||||
PacketUtils::SavePacket("lxfml packet " + std::to_string(res->getUInt(1)) + ".bin", (char*)bitStream.GetData(), bitStream.GetNumberOfBytesUsed());
|
PacketUtils::SavePacket("lxfml packet " + std::to_string(modelId) + ".bin", (char*)bitStream.GetData(), bitStream.GetNumberOfBytesUsed());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user