Skip to content

Commit

Permalink
gaming
Browse files Browse the repository at this point in the history
  • Loading branch information
Jettford committed Nov 22, 2023
1 parent f8a01de commit 1ea65b3
Show file tree
Hide file tree
Showing 11 changed files with 67 additions and 83 deletions.
8 changes: 3 additions & 5 deletions dCommon/FdbToSqlite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,17 @@ FdbToSqlite::Convert::Convert(std::string binaryOutPath) {
this->m_BinaryOutPath = binaryOutPath;
}

bool FdbToSqlite::Convert::ConvertDatabase(AssetMemoryBuffer& buffer) {
bool FdbToSqlite::Convert::ConvertDatabase(AssetStream& buffer) {
if (m_ConversionStarted) return false;

std::istream cdClientBuffer(&buffer);

this->m_ConversionStarted = true;
try {
CDClientDatabase::Connect(m_BinaryOutPath + "/CDServer.sqlite");

CDClientDatabase::ExecuteQuery("BEGIN TRANSACTION;");

int32_t numberOfTables = ReadInt32(cdClientBuffer);
ReadTables(numberOfTables, cdClientBuffer);
int32_t numberOfTables = ReadInt32(buffer);
ReadTables(numberOfTables, buffer);

CDClientDatabase::ExecuteQuery("COMMIT;");
} catch (CppSQLite3Exception& e) {
Expand Down
4 changes: 2 additions & 2 deletions dCommon/FdbToSqlite.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <iosfwd>
#include <map>

class AssetMemoryBuffer;
#include "AssetManager.h"

enum class eSqliteDataType : int32_t;

Expand All @@ -27,7 +27,7 @@ namespace FdbToSqlite {
*
* @return true if the database was converted properly, false otherwise.
*/
bool ConvertDatabase(AssetMemoryBuffer& buffer);
bool ConvertDatabase(AssetStream& buffer);

/**
* @brief Reads a 32 bit int from the fdb file.
Expand Down
7 changes: 3 additions & 4 deletions dCommon/dClient/AssetManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,13 +152,12 @@ bool AssetManager::GetFile(const char* name, char** data, uint32_t* len) {
return success;
}

AssetMemoryBuffer AssetManager::GetFileAsBuffer(const char* name) {
char* buf;
uint32_t len;
AssetStream AssetManager::GetFile(const char* name) {
char* buf; uint32_t len;

bool success = this->GetFile(name, &buf, &len);

return AssetMemoryBuffer(buf, len, success);
return AssetStream(buf, len, success);
}

uint32_t AssetManager::crc32b(uint32_t base, uint8_t* message, size_t l) {
Expand Down
18 changes: 15 additions & 3 deletions dCommon/dClient/AssetManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ struct AssetMemoryBuffer : std::streambuf {
this->setg(base, base, base + n);
}

~AssetMemoryBuffer() {
free(m_Base);
}

pos_type seekpos(pos_type sp, std::ios_base::openmode which) override {
return seekoff(sp - pos_type(off_type(0)), std::ios_base::beg, which);
}
Expand All @@ -40,9 +44,17 @@ struct AssetMemoryBuffer : std::streambuf {
setg(eback(), eback() + off, egptr());
return gptr() - eback();
}
};

struct AssetStream : std::istream {
AssetStream(char* base, std::ptrdiff_t n, bool success) : std::istream(new AssetMemoryBuffer(base, n, success)) {}

~AssetStream() {
delete rdbuf();
}

void close() {
free(m_Base);
operator bool() {
return reinterpret_cast<AssetMemoryBuffer*>(rdbuf())->m_Success;
}
};

Expand All @@ -56,7 +68,7 @@ class AssetManager {

bool HasFile(const char* name);
bool GetFile(const char* name, char** data, uint32_t* len);
AssetMemoryBuffer GetFileAsBuffer(const char* name);
AssetStream GetFile(const char* name);

private:
void LoadPackIndex();
Expand Down
32 changes: 14 additions & 18 deletions dGame/UserManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,57 +44,53 @@ inline void StripCR(std::string& str) {
void UserManager::Initialize() {
std::string line;

AssetMemoryBuffer fnBuff = Game::assetManager->GetFileAsBuffer("names/minifigname_first.txt");
if (!fnBuff.m_Success) {
auto fnStream = Game::assetManager->GetFile("names/minifigname_first.txt");
if (!fnStream) {
LOG("Failed to load %s", (Game::assetManager->GetResPath() / "names/minifigname_first.txt").string().c_str());
throw std::runtime_error("Aborting initialization due to missing minifigure name file.");
}
std::istream fnStream = std::istream(&fnBuff);

while (std::getline(fnStream, line, '\n')) {
std::string name = line;
StripCR(name);
m_FirstNames.push_back(name);
}
fnBuff.close();

AssetMemoryBuffer mnBuff = Game::assetManager->GetFileAsBuffer("names/minifigname_middle.txt");
if (!mnBuff.m_Success) {
auto mnStream = Game::assetManager->GetFile("names/minifigname_middle.txt");
if (!mnStream) {
LOG("Failed to load %s", (Game::assetManager->GetResPath() / "names/minifigname_middle.txt").string().c_str());
throw std::runtime_error("Aborting initialization due to missing minifigure name file.");
}
std::istream mnStream = std::istream(&mnBuff);

while (std::getline(mnStream, line, '\n')) {
std::string name = line;
StripCR(name);
m_MiddleNames.push_back(name);
}
mnBuff.close();

AssetMemoryBuffer lnBuff = Game::assetManager->GetFileAsBuffer("names/minifigname_last.txt");
if (!lnBuff.m_Success) {
auto lnStream = Game::assetManager->GetFile("names/minifigname_last.txt");
if (!lnStream) {
LOG("Failed to load %s", (Game::assetManager->GetResPath() / "names/minifigname_last.txt").string().c_str());
throw std::runtime_error("Aborting initialization due to missing minifigure name file.");
}
std::istream lnStream = std::istream(&lnBuff);

while (std::getline(lnStream, line, '\n')) {
std::string name = line;
StripCR(name);
m_LastNames.push_back(name);
}
lnBuff.close();

//Load our pre-approved names:
AssetMemoryBuffer chatListBuff = Game::assetManager->GetFileAsBuffer("chatplus_en_us.txt");
if (!chatListBuff.m_Success) {
// Load our pre-approved names:
auto chatListStream = Game::assetManager->GetFile("chatplus_en_us.txt");
if (!chatListStream) {
LOG("Failed to load %s", (Game::assetManager->GetResPath() / "chatplus_en_us.txt").string().c_str());
throw std::runtime_error("Aborting initialization due to missing chat whitelist file.");
}
std::istream chatListStream = std::istream(&chatListBuff);

while (std::getline(chatListStream, line, '\n')) {
StripCR(line);
m_PreapprovedNames.push_back(line);
}
chatListBuff.close();
}

UserManager::~UserManager() {
Expand Down Expand Up @@ -207,7 +203,7 @@ void UserManager::RequestCharacterList(const SystemAddress& sysAddr) {
chars[i]->SaveXMLToDatabase();

chars[i]->GetEntity()->SetCharacter(nullptr);

delete chars[i];
}

Expand Down
13 changes: 2 additions & 11 deletions dGame/dInventory/Item.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -423,25 +423,16 @@ void Item::DisassembleModel(uint32_t numToDismantle) {
if (renderAssetSplit.empty()) return;

std::string lxfmlPath = "BrickModels" + lxfmlFolderName + "/" + GeneralUtils::SplitString(renderAssetSplit.back(), '.').at(0) + ".lxfml";
auto buffer = Game::assetManager->GetFileAsBuffer(lxfmlPath.c_str());
auto file = Game::assetManager->GetFile(lxfmlPath.c_str());

if (!buffer.m_Success) {
if (!file) {
LOG("Failed to load %s to disassemble model into bricks, check that this file exists", lxfmlPath.c_str());
return;
}

std::istream file(&buffer);

if (!file.good()) {
buffer.close();
return;
}

std::stringstream data;
data << file.rdbuf();

buffer.close();

uint32_t fileSize;
file.seekg(0, std::ios::end);
fileSize = static_cast<uint32_t>(file.tellg());
Expand Down
13 changes: 4 additions & 9 deletions dGame/dPropertyBehaviors/ControlBehaviors.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,14 +324,9 @@ void ControlBehaviors::ProcessCommand(Entity* modelEntity, const SystemAddress&
}

ControlBehaviors::ControlBehaviors() {
auto blocksDefStreamBuffer = Game::assetManager->GetFileAsBuffer("ui\\ingame\\blocksdef.xml");
if (!blocksDefStreamBuffer.m_Success) {
LOG("failed to open blocksdef");
return;
}
std::istream blocksBuffer(&blocksDefStreamBuffer);
if (!blocksBuffer.good()) {
LOG("Blocks buffer is not good!");
auto blocksBuffer = Game::assetManager->GetFile("ui\\ingame\\blocksdef.xml");
if (!blocksBuffer) {
LOG("Failed to open blocksdef.xml");
return;
}

Expand All @@ -342,7 +337,7 @@ ControlBehaviors::ControlBehaviors() {
std::string buffer{};
bool commentBlockStart = false;
while (std::getline(blocksBuffer, read)) {
// tinyxml2 should handle comment blocks but the client has one that fails the processing.
// tinyxml2 should handle comment blocks but the client has one that fails the processing.
// This preprocessing just removes all comments from the read file out of an abundance of caution.
if (read.find("<!--") != std::string::npos) {
commentBlockStart = true;
Expand Down
12 changes: 2 additions & 10 deletions dGame/dUtilities/BrickDatabase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,18 @@ const BrickList& BrickDatabase::GetBricks(const LxfmlPath& lxfmlPath) {
return cached->second;
}

AssetMemoryBuffer buffer = Game::assetManager->GetFileAsBuffer((lxfmlPath).c_str());
auto file = Game::assetManager->GetFile((lxfmlPath).c_str());

if (!buffer.m_Success) {
return emptyCache;
}

std::istream file(&buffer);
if (!file.good()) {
if (!file) {
return emptyCache;
}

std::stringstream data;
data << file.rdbuf();
if (data.str().empty()) {
buffer.close();
return emptyCache;
}

buffer.close();

auto* doc = new tinyxml2::XMLDocument();
if (doc->Parse(data.str().c_str(), data.str().size()) != 0) {
delete doc;
Expand Down
8 changes: 2 additions & 6 deletions dGame/dUtilities/SlashCommandHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -591,15 +591,13 @@ void SlashCommandHandler::HandleChatCommand(const std::u16string& command, Entit
if (args[0].find("/") != std::string::npos) return;
if (args[0].find("\\") != std::string::npos) return;

auto buf = Game::assetManager->GetFileAsBuffer(("macros/" + args[0] + ".scm").c_str());
auto infile = Game::assetManager->GetFile(("macros/" + args[0] + ".scm").c_str());

if (!buf.m_Success) {
if (!infile) {
ChatPackets::SendSystemMessage(sysAddr, u"Unknown macro! Is the filename right?");
return;
}

std::istream infile(&buf);

if (infile.good()) {
std::string line;
while (std::getline(infile, line)) {
Expand All @@ -609,8 +607,6 @@ void SlashCommandHandler::HandleChatCommand(const std::u16string& command, Entit
ChatPackets::SendSystemMessage(sysAddr, u"Unknown macro! Is the filename right?");
}

buf.close();

return;
}

Expand Down
11 changes: 4 additions & 7 deletions dZoneManager/Level.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,14 @@
Level::Level(Zone* parentZone, const std::string& filepath) {
m_ParentZone = parentZone;

auto buffer = Game::assetManager->GetFileAsBuffer(filepath.c_str());
auto stream = Game::assetManager->GetFile(filepath.c_str());

if (!buffer.m_Success) {
if (!stream) {
LOG("Failed to load %s", filepath.c_str());
return;
}

std::istream file(&buffer);
ReadChunks(file);

buffer.close();

ReadChunks(stream);
}

void Level::MakeSpawner(SceneObject obj) {
Expand Down
24 changes: 16 additions & 8 deletions dZoneManager/Zone.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,13 @@ void Zone::LoadZoneIntoMemory() {
m_ZonePath = m_ZoneFilePath.substr(0, m_ZoneFilePath.rfind('/') + 1);
if (m_ZoneFilePath == "ERR") return;

AssetMemoryBuffer buffer = Game::assetManager->GetFileAsBuffer(m_ZoneFilePath.c_str());
auto file = Game::assetManager->GetFile(m_ZoneFilePath.c_str());

if (!buffer.m_Success) {
if (!file) {
LOG("Failed to load %s", m_ZoneFilePath.c_str());
throw std::runtime_error("Aborting Zone loading due to no Zone File.");
}

std::istream file(&buffer);
if (file) {
BinaryIO::BinaryRead(file, m_FileFormatVersion);

Expand Down Expand Up @@ -148,9 +147,8 @@ void Zone::LoadZoneIntoMemory() {
} else {
LOG("Failed to open: %s", m_ZoneFilePath.c_str());
}

m_ZonePath = m_ZoneFilePath.substr(0, m_ZoneFilePath.rfind('/') + 1);

buffer.close();
}

std::string Zone::GetFilePathForZoneID() {
Expand Down Expand Up @@ -243,23 +241,33 @@ void Zone::LoadScene(std::istream& file) {
m_Scenes.insert(std::make_pair(lwoSceneID, scene));
}

<<<<<<< Updated upstream

Check failure on line 244 in dZoneManager/Zone.cpp

View workflow job for this annotation

GitHub Actions / Build & Test (ubuntu-20.04)

version control conflict marker in file

Check failure on line 244 in dZoneManager/Zone.cpp

View workflow job for this annotation

GitHub Actions / Build & Test (macos-11)

version control conflict marker in file
void Zone::LoadLUTriggers(std::string triggerFile, SceneRef& scene) {
auto buffer = Game::assetManager->GetFileAsBuffer((m_ZonePath + triggerFile).c_str());

Check failure on line 246 in dZoneManager/Zone.cpp

View workflow job for this annotation

GitHub Actions / Build & Test (macos-11)

no member named 'GetFileAsBuffer' in 'AssetManager'
=======
std::vector<LUTriggers::Trigger*> Zone::LoadLUTriggers(std::string triggerFile, LWOSCENEID sceneID) {
std::vector<LUTriggers::Trigger*> lvlTriggers;

if (!buffer.m_Success) {
auto file = Game::assetManager->GetFile((m_ZonePath + triggerFile).c_str());
>>>>>>> Stashed changes

if (!file) {

Check failure on line 254 in dZoneManager/Zone.cpp

View workflow job for this annotation

GitHub Actions / Build & Test (macos-11)

use of undeclared identifier 'file'
LOG("Failed to load %s from disk. Skipping loading triggers", (m_ZonePath + triggerFile).c_str());
return;
}

std::istream file(&buffer);

std::stringstream data;
data << file.rdbuf();

Check failure on line 260 in dZoneManager/Zone.cpp

View workflow job for this annotation

GitHub Actions / Build & Test (macos-11)

use of undeclared identifier 'file'; did you mean 'false'?

Check failure on line 260 in dZoneManager/Zone.cpp

View workflow job for this annotation

GitHub Actions / Build & Test (macos-11)

member reference base type 'bool' is not a structure or union

<<<<<<< Updated upstream

Check failure on line 262 in dZoneManager/Zone.cpp

View workflow job for this annotation

GitHub Actions / Build & Test (macos-11)

version control conflict marker in file
buffer.close();

data.seekg(0, std::ios::end);
int32_t size = data.tellg();
data.seekg(0, std::ios::beg);
=======
if (data.str().size() == 0) return lvlTriggers;
>>>>>>> Stashed changes

if (size == 0) return;

Expand Down

0 comments on commit 1ea65b3

Please sign in to comment.