mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-22 13:37:22 +00:00
Fix Pet Taming causing seg fault (#818)
* Fix Pet Taming * Fix Pet Taming * fix pet taming path loading just make it go to build file since the asset managet handles intermediate steps there is never res in the path in the live db, so no need to check * special case BrickModels to uppercase if unpacked remove redundent variable Co-authored-by: Aaron Kimbrell <aronwk.aaron@gmail.com>
This commit is contained in:
parent
162f84e285
commit
1d5c71eb9b
@ -67,6 +67,8 @@ bool AssetManager::HasFile(const char* name) {
|
|||||||
auto fixedName = std::string(name);
|
auto fixedName = std::string(name);
|
||||||
std::transform(fixedName.begin(), fixedName.end(), fixedName.begin(), [](uint8_t c) { return std::tolower(c); });
|
std::transform(fixedName.begin(), fixedName.end(), fixedName.begin(), [](uint8_t c) { return std::tolower(c); });
|
||||||
|
|
||||||
|
// Special case for unpacked client have BrickModels in upper case
|
||||||
|
if (this->m_AssetBundleType == eAssetBundleType::Unpacked) GeneralUtils::ReplaceInString(fixedName, "brickmodels", "BrickModels");
|
||||||
|
|
||||||
std::replace(fixedName.begin(), fixedName.end(), '\\', '/');
|
std::replace(fixedName.begin(), fixedName.end(), '\\', '/');
|
||||||
if (std::filesystem::exists(m_ResPath / fixedName)) return true;
|
if (std::filesystem::exists(m_ResPath / fixedName)) return true;
|
||||||
@ -92,17 +94,19 @@ bool AssetManager::GetFile(const char* name, char** data, uint32_t* len) {
|
|||||||
auto fixedName = std::string(name);
|
auto fixedName = std::string(name);
|
||||||
std::transform(fixedName.begin(), fixedName.end(), fixedName.begin(), [](uint8_t c) { return std::tolower(c); });
|
std::transform(fixedName.begin(), fixedName.end(), fixedName.begin(), [](uint8_t c) { return std::tolower(c); });
|
||||||
std::replace(fixedName.begin(), fixedName.end(), '\\', '/'); // On the off chance someone has the wrong slashes, force forward slashes
|
std::replace(fixedName.begin(), fixedName.end(), '\\', '/'); // On the off chance someone has the wrong slashes, force forward slashes
|
||||||
auto realPathName = fixedName;
|
|
||||||
|
|
||||||
if (std::filesystem::exists(m_ResPath / realPathName)) {
|
// Special case for unpacked client have BrickModels in upper case
|
||||||
|
if (this->m_AssetBundleType == eAssetBundleType::Unpacked) GeneralUtils::ReplaceInString(fixedName, "brickmodels", "BrickModels");
|
||||||
|
|
||||||
|
if (std::filesystem::exists(m_ResPath / fixedName)) {
|
||||||
FILE* file;
|
FILE* file;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
fopen_s(&file, (m_ResPath / realPathName).string().c_str(), "rb");
|
fopen_s(&file, (m_ResPath / fixedName).string().c_str(), "rb");
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
// macOS has 64bit file IO by default
|
// macOS has 64bit file IO by default
|
||||||
file = fopen((m_ResPath / realPathName).string().c_str(), "rb");
|
file = fopen((m_ResPath / fixedName).string().c_str(), "rb");
|
||||||
#else
|
#else
|
||||||
file = fopen64((m_ResPath / realPathName).string().c_str(), "rb");
|
file = fopen64((m_ResPath / fixedName).string().c_str(), "rb");
|
||||||
#endif
|
#endif
|
||||||
fseek(file, 0, SEEK_END);
|
fseek(file, 0, SEEK_END);
|
||||||
*len = ftell(file);
|
*len = ftell(file);
|
||||||
|
@ -194,21 +194,7 @@ void PetComponent::OnUse(Entity* originator) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto lxfAsset = std::string(result.getStringField(0));
|
buildFile = std::string(result.getStringField(0));
|
||||||
|
|
||||||
std::vector<std::string> lxfAssetSplit = GeneralUtils::SplitString(lxfAsset, '\\');
|
|
||||||
|
|
||||||
lxfAssetSplit.erase(lxfAssetSplit.begin());
|
|
||||||
|
|
||||||
buildFile = "res/BrickModels";
|
|
||||||
|
|
||||||
for (auto part : lxfAssetSplit) {
|
|
||||||
std::transform(part.begin(), part.end(), part.begin(), [](unsigned char c) {
|
|
||||||
return std::tolower(c);
|
|
||||||
});
|
|
||||||
|
|
||||||
buildFile += "/" + part;
|
|
||||||
}
|
|
||||||
|
|
||||||
PetPuzzleData data;
|
PetPuzzleData data;
|
||||||
data.buildFile = buildFile;
|
data.buildFile = buildFile;
|
||||||
|
@ -18,7 +18,7 @@ std::vector<Brick>& BrickDatabase::GetBricks(const std::string& lxfmlPath) {
|
|||||||
return cached->second;
|
return cached->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetMemoryBuffer buffer = Game::assetManager->GetFileAsBuffer(("client/" + lxfmlPath).c_str());
|
AssetMemoryBuffer buffer = Game::assetManager->GetFileAsBuffer((lxfmlPath).c_str());
|
||||||
std::istream file(&buffer);
|
std::istream file(&buffer);
|
||||||
if (!file.good()) {
|
if (!file.good()) {
|
||||||
return emptyCache;
|
return emptyCache;
|
||||||
|
Loading…
Reference in New Issue
Block a user