mirror of
https://github.com/CookiePLMonster/SilentPatch.git
synced 2024-12-29 15:23:02 +05:00
Expose LS-RP mode server list to INI
This commit is contained in:
parent
a0b1f9690a
commit
0d7cd7dec9
1 changed files with 127 additions and 66 deletions
|
@ -73,63 +73,6 @@ namespace ModCompat
|
||||||
return aware;
|
return aware;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct IPv4
|
|
||||||
{
|
|
||||||
uint8_t ip[4];
|
|
||||||
uint16_t port;
|
|
||||||
|
|
||||||
friend bool operator == ( const IPv4& left, const IPv4& right )
|
|
||||||
{
|
|
||||||
return std::make_tuple( left.ip[0], left.ip[1], left.ip[2], left.ip[3], left.port ) == std::make_tuple( right.ip[0], right.ip[1], right.ip[2], right.ip[3], right.port );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
bool LSRPMode = false;
|
|
||||||
void DetectPlayingOnLSRP()
|
|
||||||
{
|
|
||||||
constexpr IPv4 serversWithLSRPMode[] = {
|
|
||||||
{ 149, 56, 123, 148, 7777 }, // LS-RP
|
|
||||||
{ 198, 27, 95, 178, 7777 }, // AD:RP
|
|
||||||
};
|
|
||||||
|
|
||||||
IPv4 myIP = {};
|
|
||||||
|
|
||||||
// Obtain IP and check if it's LS-RP
|
|
||||||
int numArgs = 0;
|
|
||||||
LPWSTR* cmdLine = CommandLineToArgvW( GetCommandLineW(), &numArgs );
|
|
||||||
if ( cmdLine != nullptr )
|
|
||||||
{
|
|
||||||
for ( auto it = cmdLine + 1, end = cmdLine + numArgs; it != end; ++it )
|
|
||||||
{
|
|
||||||
if ( _wcsicmp( *it, L"-h" ) == 0 )
|
|
||||||
{
|
|
||||||
auto ipIt = std::next( it );
|
|
||||||
if ( ipIt != end )
|
|
||||||
{
|
|
||||||
swscanf_s( *ipIt, L"%" SCNu8 ".%" SCNu8 ".%" SCNu8 ".%" SCNu8, &myIP.ip[0], &myIP.ip[1], &myIP.ip[2], &myIP.ip[3] );
|
|
||||||
it = ipIt;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( _wcsicmp( *it, L"-p") == 0 )
|
|
||||||
{
|
|
||||||
auto portIt = std::next( it );
|
|
||||||
if ( portIt != end )
|
|
||||||
{
|
|
||||||
swscanf_s( *portIt, L"%" SCNu16 , &myIP.port );
|
|
||||||
it = portIt;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LocalFree( cmdLine );
|
|
||||||
}
|
|
||||||
|
|
||||||
LSRPMode = std::find( std::begin(serversWithLSRPMode), std::end(serversWithLSRPMode), myIP ) != std::end(serversWithLSRPMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace Utils
|
namespace Utils
|
||||||
{
|
{
|
||||||
template<typename AT>
|
template<typename AT>
|
||||||
|
@ -398,11 +341,7 @@ static struct
|
||||||
{ ".m4a", DECODER_QUICKTIME }, { ".mov", DECODER_QUICKTIME },
|
{ ".m4a", DECODER_QUICKTIME }, { ".mov", DECODER_QUICKTIME },
|
||||||
{ ".fla", DECODER_FLAC }, { ".flac", DECODER_FLAC } };
|
{ ".fla", DECODER_FLAC }, { ".flac", DECODER_FLAC } };
|
||||||
|
|
||||||
static bool IgnoresWeaponPedsForPCFix()
|
static bool IgnoresWeaponPedsForPCFix();
|
||||||
{
|
|
||||||
// TODO: Pre-emptively add INI option to save hassle in the future
|
|
||||||
return ModCompat::LSRPMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Regular functions
|
// Regular functions
|
||||||
static RpAtomic* RenderAtomic(RpAtomic* pAtomic, float fComp)
|
static RpAtomic* RenderAtomic(RpAtomic* pAtomic, float fComp)
|
||||||
|
@ -1600,6 +1539,125 @@ namespace TrueInvicibility
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ============= LS-RP Mode stuff =============
|
||||||
|
namespace LSRPMode
|
||||||
|
{
|
||||||
|
struct IPv4
|
||||||
|
{
|
||||||
|
uint8_t ip[4];
|
||||||
|
uint16_t port;
|
||||||
|
|
||||||
|
friend bool operator == ( const IPv4& left, const IPv4& right )
|
||||||
|
{
|
||||||
|
return std::make_tuple( left.ip[0], left.ip[1], left.ip[2], left.ip[3] ) == std::make_tuple( right.ip[0], right.ip[1], right.ip[2], right.ip[3] ) &&
|
||||||
|
( left.port == right.port || left.port == 0 || right.port == 0 );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector <IPv4> serversLSRPMode = {
|
||||||
|
{ 149, 56, 123, 148, 7777 }, // LS-RP
|
||||||
|
{ 198, 27, 95, 178, 7777 }, // AD:RP
|
||||||
|
};
|
||||||
|
|
||||||
|
bool ModeForced = false;
|
||||||
|
void DetectPlayingOnLSRP()
|
||||||
|
{
|
||||||
|
IPv4 myIP = {};
|
||||||
|
|
||||||
|
// Obtain IP and check if it's LS-RP
|
||||||
|
int numArgs = 0;
|
||||||
|
LPWSTR* cmdLine = CommandLineToArgvW( GetCommandLineW(), &numArgs );
|
||||||
|
if ( cmdLine != nullptr )
|
||||||
|
{
|
||||||
|
for ( auto it = cmdLine + 1, end = cmdLine + numArgs; it != end; ++it )
|
||||||
|
{
|
||||||
|
if ( _wcsicmp( *it, L"-h" ) == 0 )
|
||||||
|
{
|
||||||
|
auto ipIt = std::next( it );
|
||||||
|
if ( ipIt != end )
|
||||||
|
{
|
||||||
|
swscanf_s( *ipIt, L"%" SCNu8 ".%" SCNu8 ".%" SCNu8 ".%" SCNu8, &myIP.ip[0], &myIP.ip[1], &myIP.ip[2], &myIP.ip[3] );
|
||||||
|
it = ipIt;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( _wcsicmp( *it, L"-p") == 0 )
|
||||||
|
{
|
||||||
|
auto portIt = std::next( it );
|
||||||
|
if ( portIt != end )
|
||||||
|
{
|
||||||
|
swscanf_s( *portIt, L"%" SCNu16 , &myIP.port );
|
||||||
|
it = portIt;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalFree( cmdLine );
|
||||||
|
}
|
||||||
|
|
||||||
|
ModeForced = std::find( serversLSRPMode.begin(), serversLSRPMode.end(), myIP ) != serversLSRPMode.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReadServersList(const wchar_t* pPath)
|
||||||
|
{
|
||||||
|
constexpr size_t SCRATCH_PAD_SIZE = 32767;
|
||||||
|
WideDelimStringReader reader( SCRATCH_PAD_SIZE );
|
||||||
|
|
||||||
|
GetPrivateProfileSectionW( L"LSRPModeServers", reader.GetBuffer(), reader.GetSize(), pPath );
|
||||||
|
while ( const wchar_t* str = reader.GetString() )
|
||||||
|
{
|
||||||
|
int ip[4] = {};
|
||||||
|
int port = 0;
|
||||||
|
|
||||||
|
// IP is mandatory, port is optional
|
||||||
|
int argsRead = swscanf_s( str, L"%d.%d.%d.%d", &ip[0], &ip[1], &ip[2], &ip[3] );
|
||||||
|
if ( argsRead == 4 )
|
||||||
|
{
|
||||||
|
swscanf_s( str, L"%*d.%*d.%*d.%*d:%d", &port );
|
||||||
|
|
||||||
|
IPv4 myIP = {};
|
||||||
|
bool validIP = true;
|
||||||
|
|
||||||
|
for ( size_t i = 0; i < 4; i++ )
|
||||||
|
{
|
||||||
|
if ( ip[i] >= 0 && ip[i] <= UINT8_MAX )
|
||||||
|
{
|
||||||
|
myIP.ip[i] = static_cast<uint8_t>(ip[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
validIP = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( port >= 0 && port <= UINT16_MAX )
|
||||||
|
{
|
||||||
|
myIP.port = static_cast<uint16_t>(port);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
validIP = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( validIP )
|
||||||
|
{
|
||||||
|
serversLSRPMode.emplace_back( myIP );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool IgnoresWeaponPedsForPCFix()
|
||||||
|
{
|
||||||
|
// TODO: Pre-emptively add INI option to save hassle in the future
|
||||||
|
return LSRPMode::ModeForced;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
|
||||||
// ============= QPC spoof for verifying high timer issues =============
|
// ============= QPC spoof for verifying high timer issues =============
|
||||||
|
@ -2481,7 +2539,8 @@ BOOL InjectDelayedPatches_10()
|
||||||
|
|
||||||
if ( bSAMP )
|
if ( bSAMP )
|
||||||
{
|
{
|
||||||
ModCompat::DetectPlayingOnLSRP();
|
LSRPMode::ReadServersList(wcModulePath);
|
||||||
|
LSRPMode::DetectPlayingOnLSRP();
|
||||||
}
|
}
|
||||||
|
|
||||||
const HMODULE skygfxModule = moduleList.Get( L"skygfx" );
|
const HMODULE skygfxModule = moduleList.Get( L"skygfx" );
|
||||||
|
@ -2496,7 +2555,7 @@ BOOL InjectDelayedPatches_10()
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
if ( bHasDebugMenu )
|
if ( bHasDebugMenu )
|
||||||
{
|
{
|
||||||
DebugMenuAddVar( "SilentPatch", "LS-RP Mode", &ModCompat::LSRPMode, nullptr );
|
DebugMenuAddVar( "SilentPatch", "Force LS-RP Mode", &LSRPMode::ModeForced, nullptr );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2921,7 +2980,8 @@ BOOL InjectDelayedPatches_11()
|
||||||
|
|
||||||
if ( bSAMP )
|
if ( bSAMP )
|
||||||
{
|
{
|
||||||
ModCompat::DetectPlayingOnLSRP();
|
LSRPMode::ReadServersList(wcModulePath);
|
||||||
|
LSRPMode::DetectPlayingOnLSRP();
|
||||||
}
|
}
|
||||||
|
|
||||||
ReadRotorFixExceptions(wcModulePath);
|
ReadRotorFixExceptions(wcModulePath);
|
||||||
|
@ -3096,7 +3156,8 @@ BOOL InjectDelayedPatches_Steam()
|
||||||
|
|
||||||
if ( bSAMP )
|
if ( bSAMP )
|
||||||
{
|
{
|
||||||
ModCompat::DetectPlayingOnLSRP();
|
LSRPMode::ReadServersList(wcModulePath);
|
||||||
|
LSRPMode::DetectPlayingOnLSRP();
|
||||||
}
|
}
|
||||||
|
|
||||||
ReadRotorFixExceptions(wcModulePath);
|
ReadRotorFixExceptions(wcModulePath);
|
||||||
|
|
Loading…
Reference in a new issue