Advertisement
Guest User

Console Variable Flags Manager

a guest
May 14th, 2013
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. #include "ExtDll.h"
  6. #include "MetaApi.h"
  7.  
  8. #if !defined __linux__
  9.     #define C_DLLEXPORT extern "C" __declspec ( dllexport )
  10. #else
  11.     #define C_DLLEXPORT extern "C" __attribute__ ( ( visibility( "default" ) ) )
  12. #endif
  13.  
  14. EngineFunctions_t g_EngineFunctions; GlobalVariables_t  * g_pGlobalVariables; DllFunctions_t * g_pDllFunctions; DllFunctions_t * g_pDllFunctions_Post; EngineFunctions_t * g_pEngineFunctions;
  15. EngineFunctions_t * g_pEngineFunctions_Post; MetaGlobals_t * g_pMetaGlobals; GameDllFunctions_t * g_pGameDllFunctions; MetaUtilFunctions_t * g_pMetaUtilFunctions;
  16.  
  17. static PluginInfo_t Plugin_info = {
  18.     "5:13", "Console Variables Manager", "1", __DATE__, "Hattrick (Claudiu HKS)", "http://forums.alliedmods.net/member.php?u=69445", "CONSOLE VARIABLES MANAGER", PT_ANYTIME, PT_ANYTIME
  19. };
  20.  
  21. void trim( char * p ) {
  22.     while( isspace( * p ) )p ++;
  23.     for( size_t i = strlen( p ) - 1; i >=0&&isspace( p[ i ] ); i -- ) p[ i ] = '\0';
  24. }
  25.  
  26. void ServerActivate_Post( Edict_t *, int, int ) {
  27.     static char Game[ 32 ], Location[ 128 ], Line[ 512 ], Variable[ 128 ], Iterator;
  28.  
  29.     g_EngineFunctions.pfnGetGameDir( Game );
  30.  
  31.     _snprintf( Location, sizeof Location - 1, "%s/ConVarMan_RemFlags.ini", Game );
  32.  
  33.     FILE * pFile = fopen( Location, "r" );
  34.  
  35.     if( pFile ) {
  36.         while( !feof( pFile ) ) {
  37.             Line[ 0 ] = '\0';
  38.  
  39.             fgets( Line, sizeof Line - 1, pFile );
  40.  
  41.             trim( Line );
  42.  
  43.             if( Line[ 0 ] == ';' || !strlen( Line ) ) continue ;
  44.  
  45.             Iterator = 0;
  46.  
  47.             while( Line[ Iterator ] != ' ' && Iterator < 127 ) {
  48.                 Variable[ Iterator ] = Line[ Iterator ];
  49.  
  50.                 Iterator ++;
  51.             }
  52.  
  53.             Variable[ Iterator ] = '\0';
  54.  
  55.             ConsoleVariable_t * pCvar = g_EngineFunctions.pfnCVarGetPointer( Variable );
  56.  
  57.             if( pCvar && pCvar -> flags & FCVAR_EXTDLL && strstr( Line, "FCVAR_EXTDLL" ) )
  58.                 pCvar -> flags &= ~FCVAR_EXTDLL;
  59.  
  60.             if( pCvar && pCvar -> flags & FCVAR_SERVER && strstr( Line, "FCVAR_SERVER" ) )
  61.                 pCvar -> flags &= ~FCVAR_SERVER;
  62.  
  63.             if( pCvar && pCvar -> flags & FCVAR_UNLOGGED && strstr( Line, "FCVAR_UNLOGGED" ) )
  64.                 pCvar -> flags &= ~FCVAR_UNLOGGED;
  65.  
  66.             if( pCvar && pCvar -> flags & FCVAR_SPONLY && strstr( Line, "FCVAR_SPONLY" ) )
  67.                 pCvar -> flags &= ~FCVAR_SPONLY;
  68.  
  69.             if( pCvar && pCvar -> flags & FCVAR_ARCHIVE && strstr( Line, "FCVAR_ARCHIVE" ) )
  70.                 pCvar -> flags &= ~FCVAR_ARCHIVE;
  71.  
  72.             if( pCvar && pCvar -> flags & FCVAR_USERINFO && strstr( Line, "FCVAR_USERINFO" ) )
  73.                 pCvar -> flags &= ~FCVAR_USERINFO;
  74.  
  75.             if( pCvar && pCvar -> flags & FCVAR_PROTECTED && strstr( Line, "FCVAR_PROTECTED" ) )
  76.                 pCvar -> flags &= ~FCVAR_PROTECTED;
  77.  
  78.             if( pCvar && pCvar -> flags & FCVAR_PRINTABLEONLY && strstr( Line, "FCVAR_PRINTABLEONLY" ) )
  79.                 pCvar -> flags &= ~FCVAR_PRINTABLEONLY;
  80.  
  81.             if( pCvar && pCvar -> flags & FCVAR_CLIENTDLL && strstr( Line, "FCVAR_CLIENTDLL" ) )
  82.                 pCvar -> flags &= ~FCVAR_CLIENTDLL;
  83.         }
  84.  
  85.         fclose( pFile );
  86.     }
  87.  
  88.     _snprintf( Location, sizeof Location - 1, "%s/ConVarMan_AddFlags.ini", Game );
  89.  
  90.     FILE * paFile = fopen( Location, "r" );
  91.  
  92.     if( paFile ) {
  93.         while( !feof( paFile ) ) {
  94.             Line[ 0 ] = '\0';
  95.  
  96.             fgets( Line, sizeof Line - 1, paFile );
  97.  
  98.             trim( Line );
  99.  
  100.             if( Line[ 0 ] == ';' || !strlen( Line ) ) continue ;
  101.  
  102.             Iterator = 0;
  103.  
  104.             while( Line[ Iterator ] != ' ' && Iterator < 127 ) {
  105.                 Variable[ Iterator ] = Line[ Iterator ];
  106.  
  107.                 Iterator ++;
  108.             }
  109.  
  110.             Variable[ Iterator ] = '\0';
  111.  
  112.             ConsoleVariable_t * pCvar = g_EngineFunctions.pfnCVarGetPointer( Variable );
  113.  
  114.             if( pCvar && !( pCvar -> flags & FCVAR_EXTDLL ) && strstr( Line, "FCVAR_EXTDLL" ) )
  115.                 pCvar -> flags |= FCVAR_EXTDLL;
  116.  
  117.             if( pCvar && !( pCvar -> flags & FCVAR_SERVER ) && strstr( Line, "FCVAR_SERVER" ) )
  118.                 pCvar -> flags |= FCVAR_SERVER;
  119.  
  120.             if( pCvar && !( pCvar -> flags & FCVAR_UNLOGGED ) && strstr( Line, "FCVAR_UNLOGGED" ) )
  121.                 pCvar -> flags |= FCVAR_UNLOGGED;
  122.  
  123.             if( pCvar && !( pCvar -> flags & FCVAR_SPONLY ) && strstr( Line, "FCVAR_SPONLY" ) )
  124.                 pCvar -> flags |= FCVAR_SPONLY;
  125.  
  126.             if( pCvar && !( pCvar -> flags & FCVAR_ARCHIVE ) && strstr( Line, "FCVAR_ARCHIVE" ) )
  127.                 pCvar -> flags |= FCVAR_ARCHIVE;
  128.  
  129.             if( pCvar && !( pCvar -> flags & FCVAR_USERINFO ) && strstr( Line, "FCVAR_USERINFO" ) )
  130.                 pCvar -> flags |= FCVAR_USERINFO;
  131.  
  132.             if( pCvar && !( pCvar -> flags & FCVAR_PROTECTED ) && strstr( Line, "FCVAR_PROTECTED" ) )
  133.                 pCvar -> flags |= FCVAR_PROTECTED;
  134.  
  135.             if( pCvar && !( pCvar -> flags & FCVAR_PRINTABLEONLY ) && strstr( Line, "FCVAR_PRINTABLEONLY" ) )
  136.                 pCvar -> flags |= FCVAR_PRINTABLEONLY;
  137.  
  138.             if( pCvar && !( pCvar -> flags & FCVAR_CLIENTDLL ) && strstr( Line, "FCVAR_CLIENTDLL" ) )
  139.                 pCvar -> flags |= FCVAR_CLIENTDLL;
  140.         }
  141.  
  142.         fclose( paFile );
  143.     }
  144.  
  145.     do {
  146.         g_pMetaGlobals -> Result = MRES_IGNORED;
  147.  
  148.         return;
  149.     }
  150.  
  151.     while( 0 );
  152. }
  153.  
  154. C_DLLEXPORT int GetEntityAPI2_Post(DllFunctions_t *pFunctionTable, int *){
  155.     pFunctionTable->pfnServerActivate=ServerActivate_Post;
  156.  
  157.     g_pDllFunctions_Post=pFunctionTable;
  158.  
  159.     return 1;
  160. }
  161.  
  162. static MetaFunctions_t g_MetaFunctions_Table ={
  163.     NULL, NULL, NULL, GetEntityAPI2_Post, NULL, NULL, NULL, NULL
  164. };
  165.  
  166. C_DLLEXPORT int Meta_Query( char *, PluginInfo_t **pPlugInfo, MetaUtilFunctions_t *pMetaUtilFuncs){
  167.     g_pMetaUtilFunctions = pMetaUtilFuncs;
  168.  
  169.     *pPlugInfo = &Plugin_info;
  170.  
  171.     return 1;
  172. }
  173.  
  174. C_DLLEXPORT int Meta_Attach(PluginLoadTime_t, MetaFunctions_t *pFunctionTable, MetaGlobals_t *pMGlobals, GameDllFunctions_t *pGamedllFuncs){
  175.     g_pMetaGlobals=pMGlobals;
  176.  
  177.     memcpy(pFunctionTable,&g_MetaFunctions_Table,sizeof(MetaFunctions_t));
  178.  
  179.     g_pGameDllFunctions=pGamedllFuncs;
  180.  
  181.     ConsoleVariable_t Variable = { "console_variables_manager", "1", FCVAR_SERVER | FCVAR_EXTDLL | FCVAR_SPONLY | FCVAR_UNLOGGED };
  182.  
  183.     g_EngineFunctions.pfnCVarRegister( &Variable );
  184.  
  185.     g_EngineFunctions.pfnCvar_DirectSet( g_EngineFunctions.pfnCVarGetPointer( Variable.name ), "1" );
  186.  
  187.     return 1;
  188. }
  189.  
  190. #if defined __linux__
  191.     C_DLLEXPORT void GiveFnptrsToDll( EngineFunctions_t* pengfuncsFromEngine, GlobalVariables_t *pGlobals ) {
  192. #else
  193.     C_DLLEXPORT __declspec ( naked ) void GiveFnptrsToDll( EngineFunctions_t* pengfuncsFromEngine, GlobalVariables_t *pGlobals ) {
  194. #endif
  195.  
  196. #if !defined __linux__
  197.     __asm {
  198.         push        ebp
  199.         mov     ebp, esp
  200.         sub     esp, __LOCAL_SIZE
  201.         push        ebx
  202.         push        esi
  203.         push        edi
  204.     }
  205. #endif
  206.  
  207.     memcpy(&g_EngineFunctions, pengfuncsFromEngine, sizeof(EngineFunctions_t));
  208.     g_pGlobalVariables = pGlobals;
  209.  
  210. #if !defined __linux__
  211.     __asm {
  212.         pop edi
  213.         pop esi
  214.         pop ebx
  215.         mov esp, ebp
  216.         pop ebp
  217.         ret 8
  218.     }
  219. #endif
  220.  
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement