Skip to content

Commit

Permalink
Initial WorkshopStopper9000 upload. It's pretty much complete with th…
Browse files Browse the repository at this point in the history
…is one commit, hopefully.
  • Loading branch information
OrsellGaming committed Nov 10, 2024
1 parent c77a763 commit 51538b3
Show file tree
Hide file tree
Showing 737 changed files with 207,641 additions and 2 deletions.
34 changes: 34 additions & 0 deletions .github/workflows/ms-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: MSBuild

on:
push

permissions:
contents: read

jobs:
build:
runs-on: windows-latest

steps:
- uses: actions/checkout@v4

- name: Add MSBuild into PATH
uses: microsoft/setup-msbuild@v2
with:
# Version of Visual Studio to search; defaults to latest if not specified
vs-version: "latest"
# The preferred processor architecture of MSBuild. Can be either "x86", "x64", or "arm64". "x64" is only available from Visual Studio version 17.0 and later.
msbuild-architecture: "x86"

- name: Build
working-directory: ${{env.GITHUB_WORKSPACE}}
# Add additional options to the MSBuild command line here (like platform or verbosity level).
# See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
run: msbuild /m /p:Configuration="Release" .

- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: workshopstopper9000
path: Release/workshopstopper9000.dll
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,5 @@
*.exe
*.out
*.app
/.vs
/Release
39 changes: 37 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,37 @@
# WorkshopStopper9000
A Source Engine Plugin for Portal 2 to stop workshop maps downloading for Sourcemods.
# ***WorkshopStopper9000***

## ***A Source Engine Plugin for Portal 2 Source Mods to stop workshop maps downloading.***

One issue that plagues Source Mods for Portal 2 is the issue where the game sees that the workshop folder is empty, so it re-downloads ***ALL*** of the users workshop maps into the Source Mods maps folder. There has been no proper way to stop this from happening, so here is a plugin to solve the issue!

Simply stick this plugin and its respective `.vdc` file into a `addons` folder in the Source Mod's game directory, and Portal 2 should automatically start the plugin up with the game and thus stop the game from downloading workshop maps. That's pretty much it. This took about 20 minutes to make, so if there are any issues, make a Issue post. I'll get to it within the next 20 years.

**As of writing, 11/09/2024, the plugin is only able compatible for Windows, the signature scanner needs to be made compatible for Linux still. Apologizes for any inconvenience.**

```
Please give credit to Orsell/OrsellGaming, Nanoman2525, and NULLderef, as well as the Portal 2: Multiplayer Mod Team (plugin is built off some of the P2:MM plugin's code) if you use this plugin or use its code in any way with your Source Mod. You also need to include this repository's and the P2:MM's License (see below).
```

```
MIT License
Copyright (c) 2024 Portal 2: Multiplayer Mod Team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
116 changes: 116 additions & 0 deletions common/ConfigManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//

#ifndef CONFIGMANAGER_H
#define CONFIGMANAGER_H
#ifdef _WIN32
#pragma once
#endif

#include "KeyValues.h"
#include "utlvector.h"
#include "filesystem_init.h"


// See filesystem_init for the vconfig registry values.


#define TOKEN_GAMES "Games"
#define TOKEN_GAME_DIRECTORY "GameDir"
#define TOKEN_TOOLS "Tools"

// STEAM CLOUD FLAGS
#define STEAMREMOTESTORAGE_CLOUD_CONFIG (1<<0)
#define STEAMREMOTESTORAGE_CLOUD_SPRAY (1<<1)

#define STEAMREMOTESTORAGE_CLOUD_ALL 0x7fff // all bits set, so any new items added will be on by default

struct defaultConfigInfo_t
{
char gameName[MAX_PATH];
char gameDir[MAX_PATH];
char FGD[MAX_PATH];
char steamPath[MAX_PATH];
char defaultPointEntity[MAX_PATH];
char exeName[MAX_PATH];
int steamAppID;
};

enum eSDKEpochs
{
HL2 = 1,
EP1 = 2,
EP2 = 3,
SWARM = 4,
};

extern defaultConfigInfo_t *gDefaultConfigs[];

class CGameConfigManager
{
public:

enum loadStatus_t
{
LOADSTATUS_NONE = 0, // Configs were loaded with no error
LOADSTATUS_CONVERTED, // GameConfig.txt did not exist and was created by converting GameCfg.INI
LOADSTATUS_CREATED, // GameCfg.INI was not found, the system created the default configuration based on found GameInfo.txt resources
LOADSTATUS_ERROR, // File was not loaded and was unable to perform the above fail-safe procedures
};

CGameConfigManager( void );
CGameConfigManager( const char *fileName );

~CGameConfigManager( void );

bool LoadConfigs( const char *baseDir = NULL );
bool SaveConfigs( const char *baseDir = NULL );
bool ResetConfigs( const char *baseDir = NULL );

int GetNumConfigs( void );

KeyValues *GetGameBlock( void );
KeyValues *GetGameSubBlock( const char *keyName );
bool GetDefaultGameBlock( KeyValues *pIn );

bool IsLoaded( void ) const { return m_pData != NULL; }

bool WasConvertedOnLoad( void ) const { return m_LoadStatus == LOADSTATUS_CONVERTED; }
bool WasCreatedOnLoad( void ) const { return m_LoadStatus == LOADSTATUS_CREATED; }

bool AddDefaultConfig( const defaultConfigInfo_t &info, KeyValues *out, const char *rootDirectory, const char *gameExeDir );

void SetBaseDirectory( const char *pDirectory );

void GetRootGameDirectory( char *out, size_t outLen, const char *rootDir, const char *steamDir );

const char *GetRootDirectory( void );
void SetSDKEpoch( eSDKEpochs epoch ) { m_eSDKEpoch = epoch; };

private:

void GetRootContentDirectory( char *out, size_t outLen, const char *rootDir );

const char *GetBaseDirectory( void );
const char *GetIniFilePath( void );

bool LoadConfigsInternal( const char *baseDir, bool bRecursiveCall );
void UpdateConfigsInternal( void );
void VersionConfig( void );
bool IsConfigCurrent( void );

bool ConvertGameConfigsINI( void );
bool CreateAllDefaultConfigs( void );
bool IsAppSubscribed( int nAppID );

loadStatus_t m_LoadStatus; // Holds various state about what occured while loading
KeyValues *m_pData; // Data as read from configuration file
char m_szBaseDirectory[MAX_PATH]; // Default directory
eSDKEpochs m_eSDKEpoch; // Holds the "working version" of the SDK for times when we need to create an older set of game configurations.
// This is required now that the SDK is deploying the tools for both the latest and previous versions of the engine.
};

#endif // CONFIGMANAGER_H
41 changes: 41 additions & 0 deletions common/GameUI/IGameConsole.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//===== Copyright © 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose:
//
//===========================================================================//

#ifndef IGAMECONSOLE_H
#define IGAMECONSOLE_H
#ifdef _WIN32
#pragma once
#endif

#include "tier1/interface.h"


//-----------------------------------------------------------------------------
// Purpose: interface to game/dev console
//-----------------------------------------------------------------------------
abstract_class IGameConsole : public IBaseInterface
{
public:
// activates the console, makes it visible and brings it to the foreground
virtual void Activate() = 0;

virtual void Initialize() = 0;

// hides the console
virtual void Hide() = 0;

// clears the console
virtual void Clear() = 0;

// return true if the console has focus
virtual bool IsConsoleVisible() = 0;

virtual void SetParent( int parent ) = 0;
};

#define GAMECONSOLE_INTERFACE_VERSION "GameConsole004"

#endif // IGAMECONSOLE_H
103 changes: 103 additions & 0 deletions common/GameUI/IGameUI.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//

#ifndef IGAMEUI_H
#define IGAMEUI_H
#ifdef _WIN32
#pragma once
#endif

#include "interface.h"
#include "vgui/ipanel.h"

#if !defined( _X360 )
#include "xbox/xboxstubs.h"
#endif

class CCommand;

// reasons why the user can't connect to a game server
enum ESteamLoginFailure
{
STEAMLOGINFAILURE_NONE,
STEAMLOGINFAILURE_BADTICKET,
STEAMLOGINFAILURE_NOSTEAMLOGIN,
STEAMLOGINFAILURE_VACBANNED,
STEAMLOGINFAILURE_LOGGED_IN_ELSEWHERE
};

enum ESystemNotify
{
SYSTEMNOTIFY_STORAGEDEVICES_CHANGED,
SYSTEMNOTIFY_USER_SIGNEDIN,
SYSTEMNOTIFY_USER_SIGNEDOUT,
SYSTEMNOTIFY_XLIVE_LOGON_ESTABLISHED, // we are logged into live service
SYSTEMNOTIFY_XLIVE_LOGON_CLOSED, // no longer logged into live - either from natural (signed out) or unnatural (e.g. severed net connection) causes
SYSTEMNOTIFY_XUIOPENING,
SYSTEMNOTIFY_XUICLOSED,
SYSTEMNOTIFY_INVITE_SHUTDOWN, // Cross-game invite is causing us to shutdown
SYSTEMNOTIFY_MUTECHANGED, // Player changed mute settings
SYSTEMNOTIFY_INPUTDEVICESCHANGED, // Input device has changed (used for controller disconnection)
SYSTEMNOTIFY_PROFILE_UNAVAILABLE, // Profile failed to read or write
};

//-----------------------------------------------------------------------------
// Purpose: contains all the functions that the GameUI dll exports
//-----------------------------------------------------------------------------
abstract_class IGameUI
{
public:
// initialization/shutdown
virtual void Initialize( CreateInterfaceFn appFactory ) = 0;
virtual void PostInit() = 0;

// connect to other interfaces at the same level (gameui.dll/server.dll/client.dll)
virtual void Connect( CreateInterfaceFn gameFactory ) = 0;

virtual void Start() = 0;
virtual void Shutdown() = 0;
virtual void RunFrame() = 0;

// notifications
virtual void OnGameUIActivated() = 0;
virtual void OnGameUIHidden() = 0;

// OLD: Use OnConnectToServer2
virtual void OLD_OnConnectToServer(const char *game, int IP, int port) = 0;

virtual void OnDisconnectFromServer_OLD( uint8 eSteamLoginFailure, const char *username ) = 0;
virtual void OnLevelLoadingStarted( const char *levelName, bool bShowProgressDialog ) = 0;
virtual void OnLevelLoadingFinished(bool bError, const char *failureReason, const char *extendedReason) = 0;

// level loading progress, returns true if the screen needs updating
virtual bool UpdateProgressBar(float progress, const char *statusText) = 0;
// Shows progress desc, returns previous setting... (used with custom progress bars )
virtual bool SetShowProgressText( bool show ) = 0;

// !!!!!!!!!members added after "GameUI011" initial release!!!!!!!!!!!!!!!!!!!
// Allows the level loading progress to show map-specific info
virtual void SetProgressLevelName( const char *levelName ) = 0;

// inserts specified panel as background for level load dialog
virtual void SetLoadingBackgroundDialog( vgui::VPANEL panel ) = 0;

virtual void OnConnectToServer2(const char *game, int IP, int connectionPort, int queryPort) = 0;

virtual void SetProgressOnStart() = 0;
virtual void OnDisconnectFromServer( uint8 eSteamLoginFailure ) = 0;

virtual void NeedConnectionProblemWaitScreen() = 0;
virtual void ShowPasswordUI( char const *pchCurrentPW ) = 0;

#if defined( _X360 ) && defined( _DEMO )
virtual void OnDemoTimeout( void ) = 0;
#endif
};

#define GAMEUI_INTERFACE_VERSION "GameUI011"

#endif // IGAMEUI_H
Loading

0 comments on commit 51538b3

Please sign in to comment.