Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma semicolon 1
- #include <sourcemod>
- #include <cstrike>
- #define PLUGIN_VERSION "1.0"
- #define ITEM_MAX_SIZE 128
- enum ClassType
- {
- Speed = 0,
- Gravity = 1,
- Health = 2,
- Color = 3
- }
- enum ItemType
- {
- Price,
- Value,
- Name
- }
- new String:szThingName[ClassType][128] = {
- "speed",
- "gravity",
- "health",
- "color"
- };
- new Handle:g_hDataBase = INVALID_HANDLE;
- new Handle:g_hThingsContainer[ClassType][ItemType];
- new String:szConfigPath[1024];
- public Plugin:myinfo =
- {
- name = "Deathrun Shop",
- author = "Push",
- description = "Deathrun Bonuses Shop",
- version = PLUGIN_VERSION,
- url = "http://css-quad.ru"
- };
- public OnPluginStart()
- {
- for( new i = 0; i < any:(ClassType); i++ )
- {
- for( new j = 0; j < any:(ItemType); j++ )
- {
- g_hThingsContainer[i][j] = CreateArray();
- }
- }
- BuildPath(Path_SM, szConfigPath, PLATFORM_MAX_PATH, "configs/drshop_menu.cfg");
- LoadTranslations("drshop.phrases");
- RegConsoleCmd("sm_drshop", BuyThings);
- RegAdminCmd("sm_setpoints", SetPoints, ADMFLAG_ROOT);
- decl String:szError[1024];
- g_hDataBase = SQL_Connect("clientprefs", true, szError, sizeof(szError));
- if( g_hDataBase != INVALID_HANDLE )
- {
- SQL_Query(g_hDataBase, "CREATE TABLE IF NOT EXISTS drshop ( steamid VARCHAR(64), value INT )");
- }
- else
- {
- LogError( szError );
- }
- UpdateCofig();
- }
- public OnPluginEnd()
- {
- CloseHandle( g_hDataBase );
- for( new i = 0; i < any:(ClassType); i++ )
- {
- for( new j = 0; j < any:(ItemType); j++ )
- {
- CloseHandle( g_hThingsContainer[i][j] );
- }
- }
- }
- public Action:SetPoints(client, args)
- {
- if( args == 2 )
- {
- new String:szCmdArgs[256], String:szTargets[256], String:szAmount[32], index, amount;
- GetCmdArg( 1, szCmdArgs, sizeof(szCmdArgs) );
- GetCmdArg( 2, szAmount, sizeof(szAmount) );
- BreakString( szCmdArgs, szTargets, sizeof(szTargets) );
- amount = StringToInt( szAmount );
- if (szTargets[0] == '"')
- {
- index = 1;
- if (szTargets[strlen(szTargets)-1] == '"')
- {
- szTargets[strlen(szTargets)-1] = 0;
- }
- }
- new targets[MaxClients];
- new String:notUsed[2], bool:notUsedToo;
- new count = ProcessTargetString( szTargets[index], client, targets, MaxClients, 0, notUsed, 1, notUsedToo );
- if (count < 1)
- {
- ReplyToCommand(client, "No target found.");
- return Plugin_Handled;
- }
- for( new i = 0; i < count; i++ )
- {
- SetPlayerPoints( targets[i], amount, true );
- }
- }
- return Plugin_Handled;
- }
- public Action:BuyThings(client, args)
- {
- new Handle:hMenu = CreateMenu( SelectBonusType );
- new String:szMenuName[128];
- Format( szMenuName, sizeof( szMenuName ), "DeathRun Shop v%s", PLUGIN_VERSION );
- SetMenuTitle( hMenu, szMenuName );
- for( new i = 0; i < any:(ClassType); i++ )
- {
- decl String:szMenuItem[128], String:szItemId[8];
- Format( szMenuItem, sizeof( szMenuItem ), "%t", szThingName[i] );
- IntToString( i, szItemId, sizeof( szItemId ) );
- AddMenuItem( hMenu, szItemId, szMenuItem );
- }
- SetMenuExitButton( hMenu, true );
- DisplayMenu( hMenu, client, 10 );
- return Plugin_Handled;
- }
- public SelectBonusType(Handle:hMenu, MenuAction:Msg, lParam, wParam)
- {
- decl String:szCommand[128];
- switch( Msg )
- {
- case MenuAction_Select:
- {
- if( GetMenuItem( hMenu, wParam, szCommand, sizeof( szCommand ) ) )
- {
- new thingId = StringToInt(szCommand);
- new Handle:hLocalMenu = CreateMenu( SelectBonusId );
- new String:szMenuName[128];
- Format( szMenuName, sizeof( szMenuName ), "%t", szThingName[thingId] );
- SetMenuTitle( hLocalMenu, szMenuName );
- for( new i = 0; i < GetArraySize( g_hThingsContainer[thingId][0] ); i++ )
- {
- new String:szName[ITEM_MAX_SIZE], itemType;
- itemType = _:ItemType:Name;
- GetArrayString( g_hThingsContainer[thingId][itemType], i , szName, sizeof( szName ) );
- decl String:szMsg[32], String:szNameToBeDisp[128], String:szPrice[64];
- Format( szMsg, sizeof(szMsg), "%d_%d", thingId, i );
- itemType = _:ItemType:Price;
- Format( szPrice, sizeof( szPrice ), "%t", "price", GetArrayCell( g_hThingsContainer[thingId][itemType], i ) );
- Format( szNameToBeDisp, sizeof( szNameToBeDisp ), "%s, %s", szName, szPrice );
- AddMenuItem( hLocalMenu,
- szMsg,
- szNameToBeDisp );
- }
- SetMenuExitButton( hLocalMenu, true );
- DisplayMenu( hLocalMenu, lParam, MENU_TIME_FOREVER );
- }
- }
- case MenuAction_End:
- {
- CloseHandle( hMenu );
- }
- }
- }
- public SelectBonusId(Handle:hMenu, MenuAction:Msg, lParam, wParam)
- {
- decl String:szCommand[128];
- switch( Msg )
- {
- case MenuAction_Select:
- {
- if( GetMenuItem( hMenu, wParam, szCommand, sizeof( szCommand ) ) )
- {
- decl String:szInfoOfItem[2][16];
- new String:szItemName[ITEM_MAX_SIZE], String:szItemValue[ITEM_MAX_SIZE];
- ExplodeString( szCommand, "_", szInfoOfItem, 2, 16 );
- new classType = StringToInt( szInfoOfItem[0] );
- new itemId = StringToInt( szInfoOfItem[1] );
- new itemType = _:ItemType:Name;
- GetArrayString( g_hThingsContainer[classType][itemType], itemId, szItemName, sizeof( szItemName ) );
- itemType = _:ItemType:Value;
- GetArrayString( g_hThingsContainer[classType][itemType], itemId, szItemValue, sizeof( szItemName ) );
- if( classType == _:ClassType:Speed )
- {
- SetPlayerSpeed( lParam, StringToFloat( szItemValue ) );
- }
- else if( classType == _:ClassType:Gravity )
- {
- SetPlayerGravity( lParam, StringToFloat( szItemValue ) );
- }
- else if( classType == _:ClassType:Health )
- {
- AddPlayerHealth( lParam, StringToInt( szItemValue ) );
- }
- else if( classType == _:ClassType:Color )
- {
- decl String:szRGBA[4][16];
- ExplodeString( szItemValue, " ", szRGBA, 4, 16 );
- SetPlayerColor( lParam, StringToInt( szRGBA[0] ), StringToInt( szRGBA[1] ), StringToInt( szRGBA[2] ), StringToInt( szRGBA[3] ) );
- }
- }
- DisplayMenuAtItem( hMenu, lParam, GetMenuSelectionPosition(), MENU_TIME_FOREVER );
- }
- case MenuAction_End:
- {
- if( lParam != MenuEnd_Selected )
- {
- CloseHandle( hMenu );
- }
- }
- }
- }
- stock UpdateCofig()
- {
- new Handle:kv = CreateKeyValues("Things");
- FileToKeyValues(kv, szConfigPath);
- if(!KvGotoFirstSubKey(kv))
- {
- SetFailState("Error in key values");
- }
- new String:szBonusType[128];
- do
- {
- KvGetSectionName(kv, szBonusType, sizeof(szBonusType));
- if(!KvGotoFirstSubKey(kv))
- {
- SetFailState("Error in key values");
- }
- new String:szBonusID[ITEM_MAX_SIZE];
- do
- {
- decl String:szValue[ITEM_MAX_SIZE], String:szName[ITEM_MAX_SIZE], priceOfItem, typeOfClass;
- KvGetSectionName( kv, szBonusID, sizeof( szBonusID ) );
- if( StrEqual( szBonusType, szThingName[ClassType:Speed] ) )
- {
- if( KvGetDataType( kv, "value" ) != KvData_None && KvGetDataType( kv, "price" ) != KvData_None)
- {
- KvGetString( kv, "value", szValue, sizeof( szValue ) );
- strcopy( szName, ITEM_MAX_SIZE, szBonusID );
- priceOfItem = KvGetNum( kv, "price" );
- typeOfClass = _:ClassType:Speed;
- }
- else
- {
- SetFailState( "Check your config." );
- }
- }
- else if( StrEqual( szBonusType, szThingName[ClassType:Gravity] ) )
- {
- if( KvGetDataType( kv, "value" ) != KvData_None && KvGetDataType( kv, "price" ) != KvData_None)
- {
- KvGetString( kv, "value", szValue, sizeof( szValue ) );
- strcopy( szName, ITEM_MAX_SIZE, szBonusID );
- priceOfItem = KvGetNum( kv, "price" );
- typeOfClass = _:ClassType:Gravity;
- }
- else
- {
- SetFailState( "Check your config." );
- }
- }
- else if( StrEqual( szBonusType, szThingName[ClassType:Health] ) )
- {
- if( KvGetDataType( kv, "value" ) != KvData_None && KvGetDataType( kv, "price" ) != KvData_None)
- {
- KvGetString( kv, "value", szValue, sizeof( szValue ) );
- strcopy( szName, ITEM_MAX_SIZE, szBonusID );
- priceOfItem = KvGetNum( kv, "price" );
- typeOfClass = _:ClassType:Health;
- }
- else
- {
- SetFailState( "Check your config." );
- }
- }
- else if( StrEqual( szBonusType, szThingName[ClassType:Color] ) )
- {
- if( KvGetDataType( kv, "value" ) != KvData_None && KvGetDataType( kv, "price" ) != KvData_None)
- {
- KvGetString( kv, "value", szValue, sizeof( szValue ) );
- strcopy( szName, ITEM_MAX_SIZE, szBonusID );
- priceOfItem = KvGetNum( kv, "price" );
- typeOfClass = _:ClassType:Color;
- }
- else
- {
- SetFailState( "Check your config." );
- }
- }
- new itemType = _:ItemType:Price;
- PushArrayCell( g_hThingsContainer[typeOfClass][itemType], priceOfItem );
- itemType = _:ItemType:Value;
- PushArrayString( g_hThingsContainer[typeOfClass][itemType], szValue);
- itemType = _:ItemType:Name;
- PushArrayString( g_hThingsContainer[typeOfClass][itemType], szName);
- } while( KvGotoNextKey( kv ) );
- KvGoBack( kv );
- } while( KvGotoNextKey( kv ) );
- }
- stock GetPlayerPoints( client )
- {
- if( g_hDataBase == INVALID_HANDLE )
- {
- LogError("Database is not initialized.");
- return any:0;
- }
- new String:szAuth[64], String:szQuery[256];
- GetClientAuthString( client, szAuth, sizeof(szAuth) );
- Format( szQuery, sizeof(szQuery), "SELECT value FROM drshop WHERE steamid = '%s'", szAuth );
- new Handle:hQuery = SQL_Query( g_hDataBase, szQuery );
- if( SQL_FetchRow( hQuery ) )
- {
- return any:SQL_FetchInt( hQuery, 0 );
- }
- return 0;
- }
- stock void:SetPlayerPoints( client, value, bool:type )
- {
- if( g_hDataBase == INVALID_HANDLE )
- {
- LogError("Database is not initialized.");
- }
- new String:szAuth[64], String:szQuery[256];
- GetClientAuthString( client, szAuth, sizeof(szAuth) );
- Format( szQuery, sizeof( szQuery ), "SELECT * FROM drshop WHERE steamid = '%s'", szAuth );
- new Handle:hQuery = SQL_Query( g_hDataBase, szQuery );
- if( SQL_FetchRow( hQuery ) )
- {
- if( !type )
- {
- if( value < 0 )
- {
- Format( szQuery, sizeof( szQuery ), "UPDATE drshop SET value = value + %d WHERE steamid = '%s'", value, szAuth );
- }
- else
- {
- Format( szQuery, sizeof( szQuery ), "UPDATE drshop SET value = value + %d WHERE steamid = '%s'", value, szAuth );
- }
- }
- else
- {
- Format( szQuery, sizeof( szQuery ), "UPDATE drshop SET value = %d WHERE steamid = '%s'", value, szAuth );
- }
- SQL_FastQuery( g_hDataBase, szQuery );
- }
- else
- {
- Format( szQuery, sizeof(szQuery), "INSERT INTO drshop ( steamid, value ) VALUES ('%s', %d)", szAuth, 0 );
- SQL_FastQuery( g_hDataBase, szQuery );
- }
- CloseHandle( hQuery );
- }
- stock SetPlayerSpeed( client, Float:fSpeed )
- {
- SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", fSpeed);
- }
- stock SetPlayerGravity( client, Float:fGravity )
- {
- SetEntityGravity( client, fGravity );
- }
- stock AddPlayerHealth( client, health )
- {
- SetEntityHealth( client, GetClientHealth( client ) + health );
- }
- stock SetPlayerColor( client, r, g, b, a )
- {
- SetEntityRenderMode(client, RENDER_TRANSCOLOR);
- SetEntityRenderColor(client, r, g, b, a);
- }
Advertisement
Add Comment
Please, Sign In to add comment