Add two more values.
This commit is contained in:
parent
016b549d7a
commit
d38606b574
6 changed files with 347 additions and 2 deletions
|
@ -36,6 +36,24 @@
|
||||||
|
|
||||||
#include "EvtMainFrame.h"
|
#include "EvtMainFrame.h"
|
||||||
|
|
||||||
|
static const std::map<std::int32_t, const char*> mission_id_map {{
|
||||||
|
{25600, "Mission 1 - Training"},
|
||||||
|
{25856, "Mission 2 - Patrol Operation"},
|
||||||
|
{26112, "Mission 3 - Fusion Cells in the Snow"},
|
||||||
|
{26368, "Mission 4 - Earning Changes"},
|
||||||
|
{26624, "Mission 5 - Unexpected Coordination"},
|
||||||
|
{26880, "Mission 6 - Empowering Void"},
|
||||||
|
{27136, "Mission 7 - Logisitics Obstacles"},
|
||||||
|
{27392, "Mission 8 - Wrath of the Wastelands"},
|
||||||
|
{27648, "Mission 9 - Suspicious Originator"},
|
||||||
|
{27904, "Mission 10 - Researchers Data Recovery"},
|
||||||
|
{28160, "Mission 11 - Tempestuous Sector"},
|
||||||
|
{28416, "Mission 12 - Clashes of Metal"},
|
||||||
|
{51200, "Hunting Ground 1 - Desert Pathway Safety"},
|
||||||
|
{51456, "Hunting Ground 2 - Snowfield Custodian"},
|
||||||
|
{51712, "Hunting Ground 3 - Abandoned Valley Raid"},
|
||||||
|
}};
|
||||||
|
|
||||||
EvtMainFrame::EvtMainFrame(wxWindow* parent):
|
EvtMainFrame::EvtMainFrame(wxWindow* parent):
|
||||||
MainFrame(parent),
|
MainFrame(parent),
|
||||||
_profileManager{_mbManager.saveDirectory()}
|
_profileManager{_mbManager.saveDirectory()}
|
||||||
|
@ -519,6 +537,8 @@ void EvtMainFrame::updateProfileStats() {
|
||||||
Profile* current_profile = _profileManager.currentProfile();
|
Profile* current_profile = _profileManager.currentProfile();
|
||||||
_companyName->SetLabel(current_profile->companyName());
|
_companyName->SetLabel(current_profile->companyName());
|
||||||
_credits->SetLabel(wxString::Format("%i", current_profile->getCredits()));
|
_credits->SetLabel(wxString::Format("%i", current_profile->getCredits()));
|
||||||
|
_storyProgress->SetLabel(wxString::Format("%i", current_profile->getStoryProgress()));
|
||||||
|
_lastMissionId->SetLabel(wxString::Format("%s", mission_id_map.find(current_profile->getLastMissionId()) != mission_id_map.end() ? mission_id_map.at(current_profile->lastMissionId()) : std::to_string(current_profile->lastMissionId())));
|
||||||
}
|
}
|
||||||
|
|
||||||
void EvtMainFrame::initialiseListView() {
|
void EvtMainFrame::initialiseListView() {
|
||||||
|
|
|
@ -43,7 +43,7 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
|
||||||
_managerNotebook = new wxNotebook( _mainPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
_managerNotebook = new wxNotebook( _mainPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
_profilePanel = new wxPanel( _managerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
_profilePanel = new wxPanel( _managerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||||
wxBoxSizer* bSizerProfilePanel;
|
wxBoxSizer* bSizerProfilePanel;
|
||||||
bSizerProfilePanel = new wxBoxSizer( wxHORIZONTAL );
|
bSizerProfilePanel = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
wxStaticBoxSizer* sbSizerGeneralInfo;
|
wxStaticBoxSizer* sbSizerGeneralInfo;
|
||||||
sbSizerGeneralInfo = new wxStaticBoxSizer( new wxStaticBox( _profilePanel, wxID_ANY, wxT("General information") ), wxVERTICAL );
|
sbSizerGeneralInfo = new wxStaticBoxSizer( new wxStaticBox( _profilePanel, wxID_ANY, wxT("General information") ), wxVERTICAL );
|
||||||
|
@ -70,6 +70,30 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
|
||||||
_credits->Wrap( -1 );
|
_credits->Wrap( -1 );
|
||||||
fgSizerGeneralStats->Add( _credits, 0, wxALL|wxEXPAND, 5 );
|
fgSizerGeneralStats->Add( _credits, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
_storyProgressLabel = new wxStaticText( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("Story progress:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
_storyProgressLabel->Wrap( -1 );
|
||||||
|
_storyProgressLabel->SetToolTip( wxT("What this value does or corresponds to is unknown at this point in time. It is only listed here for the sake of completion.") );
|
||||||
|
|
||||||
|
fgSizerGeneralStats->Add( _storyProgressLabel, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
_storyProgress = new wxStaticText( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
_storyProgress->Wrap( -1 );
|
||||||
|
_storyProgress->SetToolTip( wxT("What this value does or corresponds to is unknown at this point in time. It is only listed here for the sake of completion.") );
|
||||||
|
|
||||||
|
fgSizerGeneralStats->Add( _storyProgress, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
_lastMissionIdLabel = new wxStaticText( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("Last mission ID:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
_lastMissionIdLabel->Wrap( -1 );
|
||||||
|
_lastMissionIdLabel->SetToolTip( wxT("This corresponds to the last mission menu selection, not the last mission played.\nIf you see just a number instead of the mission name, please report it to the creator of this application.") );
|
||||||
|
|
||||||
|
fgSizerGeneralStats->Add( _lastMissionIdLabel, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
_lastMissionId = new wxStaticText( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
_lastMissionId->Wrap( -1 );
|
||||||
|
_lastMissionId->SetToolTip( wxT("This corresponds to the last mission menu selection, not the last mission played.\nIf you see just a number instead of the mission name, please report it to the creator of this application.") );
|
||||||
|
|
||||||
|
fgSizerGeneralStats->Add( _lastMissionId, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
sbSizerGeneralInfo->Add( fgSizerGeneralStats, 1, wxEXPAND, 5 );
|
sbSizerGeneralInfo->Add( fgSizerGeneralStats, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
|
@ -445,7 +445,7 @@
|
||||||
<object class="wxBoxSizer" expanded="1">
|
<object class="wxBoxSizer" expanded="1">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="name">bSizerProfilePanel</property>
|
<property name="name">bSizerProfilePanel</property>
|
||||||
<property name="orient">wxHORIZONTAL</property>
|
<property name="orient">wxVERTICAL</property>
|
||||||
<property name="permission">none</property>
|
<property name="permission">none</property>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
|
@ -719,6 +719,250 @@
|
||||||
<property name="wrap">-1</property>
|
<property name="wrap">-1</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Story progress:</property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">_storyProgressLabel</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip">What this value does or corresponds to is unknown at this point in time. It is only listed here for the sake of completion.</property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">0</property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">_storyProgress</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip">What this value does or corresponds to is unknown at this point in time. It is only listed here for the sake of completion.</property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Last mission ID:</property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">_lastMissionIdLabel</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip">This corresponds to the last mission menu selection, not the last mission played.
If you see just a number instead of the mission name, please report it to the creator of this application.</property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">0</property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">_lastMissionId</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip">This corresponds to the last mission menu selection, not the last mission played.
If you see just a number instead of the mission name, please report it to the creator of this application.</property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
|
|
@ -52,6 +52,10 @@ class MainFrame : public wxFrame
|
||||||
wxStaticText* _companyName;
|
wxStaticText* _companyName;
|
||||||
wxStaticText* _creditsLabel;
|
wxStaticText* _creditsLabel;
|
||||||
wxStaticText* _credits;
|
wxStaticText* _credits;
|
||||||
|
wxStaticText* _storyProgressLabel;
|
||||||
|
wxStaticText* _storyProgress;
|
||||||
|
wxStaticText* _lastMissionIdLabel;
|
||||||
|
wxStaticText* _lastMissionId;
|
||||||
wxPanel* _massPanel;
|
wxPanel* _massPanel;
|
||||||
wxListView* _installedListView;
|
wxListView* _installedListView;
|
||||||
wxButton* _moveButton;
|
wxButton* _moveButton;
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
constexpr char company_name_locator[] = "CompanyName\0\x0c\0\0\0StrProperty";
|
constexpr char company_name_locator[] = "CompanyName\0\x0c\0\0\0StrProperty";
|
||||||
constexpr char active_slot_locator[] = "ActiveFrameSlot\0\x0c\0\0\0IntProperty";
|
constexpr char active_slot_locator[] = "ActiveFrameSlot\0\x0c\0\0\0IntProperty";
|
||||||
constexpr char credits_locator[] = "Credit\0\x0c\0\0\0IntProperty";
|
constexpr char credits_locator[] = "Credit\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char story_progress_locator[] = "StoryProgress\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char last_mission_id_locator[] = "LastMissionID\0\x0c\0\0\0IntProperty";
|
||||||
|
|
||||||
using namespace Corrade;
|
using namespace Corrade;
|
||||||
|
|
||||||
|
@ -132,12 +134,53 @@ auto Profile::getCredits() -> std::int32_t {
|
||||||
_credits = *reinterpret_cast<const std::int32_t*>(iter + 0x20);
|
_credits = *reinterpret_cast<const std::int32_t*>(iter + 0x20);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
|
||||||
_credits = -1;
|
_credits = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _credits;
|
return _credits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto Profile::storyProgress() -> std::int32_t {
|
||||||
|
return _storyProgress;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto Profile::getStoryProgress() -> std::int32_t {
|
||||||
|
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
|
||||||
|
|
||||||
|
auto iter = std::search(mmap.begin(), mmap.end(), &story_progress_locator[0], &story_progress_locator[29]);
|
||||||
|
|
||||||
|
if(iter != mmap.end()) {
|
||||||
|
_storyProgress = *reinterpret_cast<const std::int32_t*>(iter + 0x26);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
|
||||||
|
_storyProgress = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _storyProgress;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto Profile::lastMissionId() -> std::int32_t {
|
||||||
|
return _lastMissionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto Profile::getLastMissionId() -> std::int32_t {
|
||||||
|
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
|
||||||
|
|
||||||
|
auto iter = std::search(mmap.begin(), mmap.end(), &last_mission_id_locator[0], &last_mission_id_locator[29]);
|
||||||
|
|
||||||
|
if(iter != mmap.end()) {
|
||||||
|
_lastMissionId = *reinterpret_cast<const std::int32_t*>(iter + 0x26);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
|
||||||
|
_lastMissionId = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _lastMissionId;
|
||||||
|
}
|
||||||
|
|
||||||
auto Profile::backup(const std::string& filename) -> bool {
|
auto Profile::backup(const std::string& filename) -> bool {
|
||||||
if(filename.empty() || (filename.length() < 5 && !Utility::String::endsWith(filename, ".zip"))) {
|
if(filename.empty() || (filename.length() < 5 && !Utility::String::endsWith(filename, ".zip"))) {
|
||||||
_lastError = "Invalid filename " + filename + " in Profile::backup()";
|
_lastError = "Invalid filename " + filename + " in Profile::backup()";
|
||||||
|
|
|
@ -32,6 +32,12 @@ class Profile {
|
||||||
auto credits() const -> std::int32_t;
|
auto credits() const -> std::int32_t;
|
||||||
auto getCredits() -> std::int32_t;
|
auto getCredits() -> std::int32_t;
|
||||||
|
|
||||||
|
auto storyProgress() -> std::int32_t;
|
||||||
|
auto getStoryProgress() -> std::int32_t;
|
||||||
|
|
||||||
|
auto lastMissionId() -> std::int32_t;
|
||||||
|
auto getLastMissionId() -> std::int32_t;
|
||||||
|
|
||||||
auto backup(const std::string& filename) -> bool;
|
auto backup(const std::string& filename) -> bool;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -50,6 +56,10 @@ class Profile {
|
||||||
std::int8_t _activeFrameSlot = 0;
|
std::int8_t _activeFrameSlot = 0;
|
||||||
|
|
||||||
std::int32_t _credits;
|
std::int32_t _credits;
|
||||||
|
|
||||||
|
std::int32_t _storyProgress;
|
||||||
|
|
||||||
|
std::int32_t _lastMissionId;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //PROFILE_H
|
#endif //PROFILE_H
|
||||||
|
|
Loading…
Reference in a new issue