[XAM] Fixed issue with achievements saving in Forza series.
Remove this ducktape asap and remove hardcodes
This commit is contained in:
@@ -183,7 +183,8 @@ bool ProfileManager::LoadAccount(const uint64_t xuid) {
|
|||||||
|
|
||||||
MountProfile(xuid);
|
MountProfile(xuid);
|
||||||
|
|
||||||
const std::string guest_path = xuid_as_string + ":\\Account";
|
const std::string guest_path =
|
||||||
|
fmt::format(kDefaultMountFormat, xuid) + ":\\Account";
|
||||||
|
|
||||||
xe::vfs::File* output_file;
|
xe::vfs::File* output_file;
|
||||||
xe::vfs::FileAction action = {};
|
xe::vfs::FileAction action = {};
|
||||||
@@ -257,7 +258,7 @@ void ProfileManager::ModifyGamertag(const uint64_t xuid, std::string gamertag) {
|
|||||||
bool ProfileManager::MountProfile(const uint64_t xuid, std::string mount_path) {
|
bool ProfileManager::MountProfile(const uint64_t xuid, std::string mount_path) {
|
||||||
std::filesystem::path profile_path = GetProfilePath(xuid);
|
std::filesystem::path profile_path = GetProfilePath(xuid);
|
||||||
if (mount_path.empty()) {
|
if (mount_path.empty()) {
|
||||||
mount_path = fmt::format("{:016X}", xuid);
|
mount_path = fmt::format(kDefaultMountFormat, xuid);
|
||||||
}
|
}
|
||||||
mount_path += ':';
|
mount_path += ':';
|
||||||
|
|
||||||
@@ -275,7 +276,7 @@ bool ProfileManager::MountProfile(const uint64_t xuid, std::string mount_path) {
|
|||||||
|
|
||||||
bool ProfileManager::DismountProfile(const uint64_t xuid) {
|
bool ProfileManager::DismountProfile(const uint64_t xuid) {
|
||||||
return kernel_state_->file_system()->UnregisterDevice(
|
return kernel_state_->file_system()->UnregisterDevice(
|
||||||
fmt::format("{:016X}", xuid) + ':');
|
fmt::format(kDefaultMountFormat, xuid) + ':');
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfileManager::Login(const uint64_t xuid, const uint8_t user_index,
|
void ProfileManager::Login(const uint64_t xuid, const uint8_t user_index,
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ constexpr uint32_t kDashboardID = 0xFFFE07D1;
|
|||||||
const static std::string kDashboardStringID =
|
const static std::string kDashboardStringID =
|
||||||
fmt::format("{:08X}", kDashboardID);
|
fmt::format("{:08X}", kDashboardID);
|
||||||
|
|
||||||
|
constexpr std::string kDefaultMountFormat = "User_{:016X}";
|
||||||
|
|
||||||
class ProfileManager {
|
class ProfileManager {
|
||||||
public:
|
public:
|
||||||
static bool DecryptAccountFile(const uint8_t* data, X_XAMACCOUNTINFO* output,
|
static bool DecryptAccountFile(const uint8_t* data, X_XAMACCOUNTINFO* output,
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ void UserProfile::LoadProfileIcon(XTileType tile_type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const std::string path =
|
const std::string path =
|
||||||
fmt::format("{:016X}:\\{}", xuid_, kTileFileNames.at(tile_type));
|
fmt::format("User_{:016X}:\\{}", xuid_, kTileFileNames.at(tile_type));
|
||||||
|
|
||||||
vfs::File* file = nullptr;
|
vfs::File* file = nullptr;
|
||||||
vfs::FileAction action;
|
vfs::FileAction action;
|
||||||
@@ -97,7 +97,7 @@ void UserProfile::LoadProfileIcon(XTileType tile_type) {
|
|||||||
|
|
||||||
std::vector<uint8_t> UserProfile::LoadGpd(const uint32_t title_id) {
|
std::vector<uint8_t> UserProfile::LoadGpd(const uint32_t title_id) {
|
||||||
auto entry = kernel_state()->file_system()->ResolvePath(
|
auto entry = kernel_state()->file_system()->ResolvePath(
|
||||||
fmt::format("{:016X}:\\{:08X}.gpd", xuid_, title_id));
|
fmt::format("User_{:016X}:\\{:08X}.gpd", xuid_, title_id));
|
||||||
|
|
||||||
if (!entry) {
|
if (!entry) {
|
||||||
XELOGW("User {} (XUID: {:016X}) doesn't have profile GPD!", name(), xuid());
|
XELOGW("User {} (XUID: {:016X}) doesn't have profile GPD!", name(), xuid());
|
||||||
@@ -139,7 +139,7 @@ bool UserProfile::WriteGpd(const uint32_t title_id) {
|
|||||||
vfs::FileAction action;
|
vfs::FileAction action;
|
||||||
|
|
||||||
const std::string mounted_path =
|
const std::string mounted_path =
|
||||||
fmt::format("{:016X}:\\{:08X}.gpd", xuid_, title_id);
|
fmt::format("User_{:016X}:\\{:08X}.gpd", xuid_, title_id);
|
||||||
|
|
||||||
const X_STATUS result = kernel_state()->file_system()->OpenFile(
|
const X_STATUS result = kernel_state()->file_system()->OpenFile(
|
||||||
nullptr, mounted_path, vfs::FileDisposition::kOverwriteIf,
|
nullptr, mounted_path, vfs::FileDisposition::kOverwriteIf,
|
||||||
|
|||||||
Reference in New Issue
Block a user