forked from cafeberry/4JLibs
148 lines
3.0 KiB
C++
148 lines
3.0 KiB
C++
#include "PRO_Sys.h"
|
|
#include "4J_Input.h"
|
|
|
|
bool s_bProfileIsFullVersion = true;
|
|
char fakeGamerTag[XUSER_NAME_SIZE] = "PlayerName";
|
|
wchar_t fakeGamerTagW[XUSER_NAME_SIZE] = L"PlayerName";
|
|
|
|
CSys::CSys()
|
|
{
|
|
m_iPrimaryPad = 0;
|
|
}
|
|
|
|
bool CSys::IsSignedIn(int iQuadrant)
|
|
{
|
|
if (InputManager.IsPadConnected(iQuadrant))
|
|
return true;
|
|
//str1k3r - since we dont sign in like consoles just check if the pad is connected
|
|
//kbm - pad 0 also counts as signed in when the keyboard is available
|
|
return iQuadrant == 0 && InputManager.IsWindowFocused();
|
|
}
|
|
|
|
bool CSys::IsSignedInLive(int iProf)
|
|
{
|
|
if (InputManager.IsPadConnected(iProf))
|
|
return true;
|
|
return iProf == 0 && InputManager.IsWindowFocused();
|
|
}
|
|
|
|
//str1k3r - set every pad that isnt pad 0 as a guest
|
|
bool CSys::IsGuest(int iQuadrant)
|
|
{
|
|
if(iQuadrant == 0)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void CSys::LoadGamertag()
|
|
{
|
|
wchar_t exeDir[MAX_PATH] = {};
|
|
GetModuleFileNameW(NULL, exeDir, MAX_PATH);
|
|
wchar_t *lastSlash = wcsrchr(exeDir, '\\');
|
|
if (lastSlash) *(lastSlash + 1) = '\0';
|
|
|
|
wchar_t filePath[MAX_PATH] = {};
|
|
if(wcscpy_s(filePath, _countof(filePath), exeDir) != 0 || wcsncat_s(filePath, _countof(filePath), L"username.txt", _TRUNCATE) != 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
FILE *file = NULL;
|
|
if (_wfopen_s(&file, filePath, L"r") == 0 && file)
|
|
{
|
|
wchar_t buffer[128] = {};
|
|
if(fgetws(buffer, _countof(buffer), file))
|
|
{
|
|
size_t len = wcslen(buffer);
|
|
while (len > 0 && (buffer[len-1] == '\n' || buffer[len-1] == '\r' || buffer[len-1] == ' ')) buffer[--len] = '\0';
|
|
|
|
if (len > 0)
|
|
{
|
|
wcscpy_s(fakeGamerTagW, _countof(fakeGamerTagW), buffer);
|
|
WideCharToMultiByte(CP_UTF8, 0, fakeGamerTagW, -1, fakeGamerTag, sizeof(fakeGamerTag), nullptr, nullptr);
|
|
}
|
|
}
|
|
fclose(file);
|
|
}
|
|
}
|
|
|
|
void CSys::SetFakeGamertag(char *name)
|
|
{
|
|
size_t chars = 0;
|
|
|
|
strcpy_s(fakeGamerTag, name);
|
|
mbstowcs_s(&chars, fakeGamerTagW, XUSER_NAME_SIZE, name, _TRUNCATE);
|
|
}
|
|
|
|
char* CSys::GetGamertag(int iPad)
|
|
{
|
|
if(iPad == 0)
|
|
{
|
|
return fakeGamerTag;
|
|
}
|
|
|
|
char iPadGamertag[XUSER_NAME_SIZE];
|
|
|
|
_snprintf_s(iPadGamertag, sizeof(iPadGamertag), "%s (%d)", fakeGamerTag, iPad);
|
|
|
|
return iPadGamertag;
|
|
}
|
|
|
|
wstring CSys::GetDisplayName(int iPad)
|
|
{
|
|
if(iPad == 0)
|
|
{
|
|
return fakeGamerTagW;
|
|
}
|
|
|
|
wchar_t iPadGamertagW[XUSER_NAME_SIZE];
|
|
|
|
_snwprintf_s(iPadGamertagW, _countof(iPadGamertagW), L"%s (%d)", fakeGamerTagW, iPad);
|
|
|
|
return iPadGamertagW;
|
|
}
|
|
|
|
bool CSys::AllowedToPlayMultiplayer(int iProf)
|
|
{
|
|
return InputManager.IsPadConnected(iProf);
|
|
}
|
|
|
|
int CSys::GetPrimaryPad()
|
|
{
|
|
return m_iPrimaryPad;
|
|
}
|
|
|
|
void CSys::SetPrimaryPad(int iPad)
|
|
{
|
|
m_iPrimaryPad = iPad;
|
|
}
|
|
|
|
void CSys::SetDebugFullOverride(bool bVal)
|
|
{
|
|
s_bProfileIsFullVersion = bVal;
|
|
}
|
|
|
|
bool CSys::IsFullVersion()
|
|
{
|
|
return s_bProfileIsFullVersion;
|
|
}
|
|
|
|
//str1k3r - fun fact this is 1:1 to the Durango lib
|
|
bool CSys::LocaleIsUSorCanada()
|
|
{
|
|
GEOID UserGeoID;
|
|
|
|
UserGeoID = GetUserGeoID(GEOCLASS_NATION);
|
|
return UserGeoID == 39 || UserGeoID == 244;
|
|
}
|
|
|
|
bool CSys::LocaleIsChina()
|
|
{
|
|
GEOID UserGeoID;
|
|
|
|
UserGeoID = GetUserGeoID(GEOCLASS_NATION);
|
|
return UserGeoID == 45;
|
|
} |