mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
* Moved dedicated server command line parameter init to 'init.cpp'. * Registered 'SV_Main' on the client, this is engine code (lower level 'local' server wrappers). * Disabled registration of Weapon_Bolt, although this is shared game code, this particular file is only used for the SERVER at this moment. * Added the '-noserverdll' command lien parameter to instruct our loader.dll to load the client.dll instead. * Adjusted the loader and sdklauncher project to support the loading of client.dll.
97 lines
2.8 KiB
C++
97 lines
2.8 KiB
C++
//===== Copyright © 1996-2005, Valve Corporation, All rights reserved. ======//
|
|
//
|
|
// Purpose: Defines the entry point for the application.
|
|
//
|
|
// $NoKeywords: $
|
|
//===========================================================================//
|
|
#include "core/stdafx.h"
|
|
#include "core/logdef.h"
|
|
#include "tier0/crashhandler.h"
|
|
#include "tier0/commandline.h"
|
|
#include "tier1/strtools.h"
|
|
#include "launcher/launcher.h"
|
|
#include <eiface.h>
|
|
|
|
int LauncherMain(HINSTANCE hInstance)
|
|
{
|
|
// Flush buffers every 5 seconds for every logger.
|
|
// Has to be done here, don't move this to SpdLog
|
|
// init, as this could cause deadlocks on certain
|
|
// compilers (VS2017)!!!
|
|
spdlog::flush_every(std::chrono::seconds(5));
|
|
|
|
int results = v_LauncherMain(hInstance);
|
|
DevMsg(eDLL_T::NONE, "%s returned: %s\n", __FUNCTION__, ExitCodeToString(results));
|
|
return results;
|
|
}
|
|
|
|
#if !defined (GAMEDLL_S0) || !defined (GAMEDLL_S1)
|
|
// Remove all but the last -game parameter.
|
|
// This is for mods based off something other than Half-Life 2 (like HL2MP mods).
|
|
// The Steam UI does 'steam -applaunch 320 -game c:\steam\steamapps\sourcemods\modname', but applaunch inserts
|
|
// its own -game parameter, which would supersede the one we really want if we didn't intercede here.
|
|
void RemoveSpuriousGameParameters()
|
|
{
|
|
// Find the last -game parameter.
|
|
int nGameArgs = 0;
|
|
char lastGameArg[MAX_PATH];
|
|
for (int i = 0; i < CommandLine()->ParmCount() - 1; i++)
|
|
{
|
|
if (Q_stricmp(CommandLine()->GetParm(i), "-game") == 0)
|
|
{
|
|
Q_snprintf(lastGameArg, sizeof(lastGameArg), "\"%s\"", CommandLine()->GetParm(i + 1));
|
|
++nGameArgs;
|
|
++i;
|
|
}
|
|
}
|
|
|
|
// We only care if > 1 was specified.
|
|
if (nGameArgs > 1)
|
|
{
|
|
CommandLine()->RemoveParm("-game");
|
|
CommandLine()->AppendParm("-game", lastGameArg);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
const char* ExitCodeToString(int nCode)
|
|
{
|
|
switch (nCode)
|
|
{
|
|
case EXIT_SUCCESS:
|
|
return "EXIT_SUCCESS";
|
|
case EXIT_FAILURE:
|
|
return "EXIT_FAILURE";
|
|
default:
|
|
return "UNKNOWN_EXIT_CODE";
|
|
}
|
|
}
|
|
|
|
LONG WINAPI TopLevelExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers)
|
|
{
|
|
// Don't run the unhandled exception filter from the
|
|
// game if we have a valid vectored exception filter.
|
|
if (g_CrashHandler)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
return v_TopLevelExceptionFilter(pExceptionPointers);
|
|
}
|
|
|
|
void VLauncher::Attach(void) const
|
|
{
|
|
DetourAttach((LPVOID*)&v_LauncherMain, &LauncherMain);
|
|
DetourAttach((LPVOID*)&v_TopLevelExceptionFilter, &TopLevelExceptionFilter);
|
|
#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
|
|
DetourAttach((LPVOID*)&v_RemoveSpuriousGameParameters, &RemoveSpuriousGameParameters);
|
|
#endif
|
|
}
|
|
void VLauncher::Detach(void) const
|
|
{
|
|
DetourDetach((LPVOID*)&v_LauncherMain, &LauncherMain);
|
|
DetourDetach((LPVOID*)&v_TopLevelExceptionFilter, &TopLevelExceptionFilter);
|
|
#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
|
|
DetourDetach((LPVOID*)&v_RemoveSpuriousGameParameters, &RemoveSpuriousGameParameters);
|
|
#endif
|
|
} |