PHP Code:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#define DB_TABLE_PREFIX "tbl_"
#define DB_CONFIG_NAME "yourDBname"
new Handle:hDataBase = INVALID_HANDLE;
new Handle:hUpdateTimer = INVALID_HANDLE;
new String:strStorage[PLATFORM_MAX_PATH];
new Handle:hStorage = INVALID_HANDLE;
public Plugin:myinfo = {
name = "Hi",
author = "Leonardo",
description = "",
version = "0.0",
url = ""
};
public OnPluginStart()
{
HookEvent( "player_activate", OnPlayerActivate, EventHookMode_Post );
HookEvent( "player_spawn", OnPlayerSpawn, EventHookMode_Post );
if( !SQL_CheckConfig( DB_CONFIG_NAME ) )
SetFailState( "Can't connect to DB: '%s' config not found in databases.cfg", DB_CONFIG_NAME );
decl String:strError[256];
hDataBase = SQL_Connect( DB_CONFIG_NAME, true, strError, sizeof(strError) );
if( hDataBase == INVALID_HANDLE )
SetFailState("Can't connect to DB: %s", strError);
SQL_LockDatabase( hDataBase );
SQL_FastQuery( hDataBase, "SET NAMES \"UTF8\";" );
SQL_UnlockDatabase( hDataBase );
}
public OnMapStart()
{
hUpdateTimer = CreateTimer( 60.0, Timer_UpdateData, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE );
TriggerTimer( hUpdateTimer );
}
public OnMapEnd()
KillTimer( hUpdateTimer );
public OnPlayerActivate( Handle:hEvent, const String:strEventName[], bool:bDontBroadcast )
TriggerTimer( hUpdateTimer );
public Action:Timer_UpdateData( Handle:hTimer )
{
new String:strQuery[2048], String:strCond[1024], String:strSteamID[32];
for( new iClient = 1; iClient <= MaxClients; iClient++ )
if( IsValidClient(iClient) )
{
GetClientAuthString( iClient, strSteamID, sizeof(strSteamID) );
Format( strCond, sizeof(strCond), "%s%s`steamid` = '%s'", strCond, strlen(strCond) > 0 ?" OR " : "", strSteamID );
}
if( strlen(strCond) > 1 )
{
Format( strQuery, sizeof(strQuery), "SELECT `steamid` WHERE %s AND `enabled` <> 0;", DB_TABLE_PREFIX, strCond );
SQL_TQuery( hDataBase, SQL_GetData, strQuery );
}
return Plugin_Continue;
}
public OnPlayerSpawn( Handle:hEvent, const String:strEventName[], bool:bDontBroadcast )
CreateTimer( 0.0, Timer_OnPlayerSpawn, GetEventInt( hEvent, "userid" ) );
public Action:Timer_OnPlayerSpawn( Handle:hTimner, any:iUserID )
{
new iClient = GetClientOfUserId( iUserID );
if( !IsValidClient(iClient) || !IsPlayerAlive(iClient) )
return;
if( hStorage == INVALID_HANDLE )
return;
decl String:strBuffer[32];
GetClientAuthString( iClient, strBuffer, sizeof(strBuffer) );
KvRewind( hStorage );
if( !KvJumpToKey( hStorage, strBuffer, false ) || !KvGetNum( hStorage, "enabled", 0 ) )
return;
SetEntityHealth( iClient, GetClientHealth( iClient ) + 10 );
}
public SQL_GetData( Handle:hOwner, Handle:hQuery, const String:strError[], any:data )
{
if( hStorage != INVALID_HANDLE )
CloseHandle( hStorage );
hStorage = INVALID_HANDLE;
if( hQuery == INVALID_HANDLE )
{
LogError( "SQL Error: %s", strlen(strError)>0?strError:"Unknown" );
return;
}
if( SQL_GetRowCount(hQuery) <= 0 )
return;
hStorage = CreateKeyValues("storage");
while( SQL_FetchRow( hQuery ) )
{
iFlags = SQL_FetchInt( hQuery, 2 );
if( iFlags <= 0 )
continue;
KvRewind( hStorage );
// steam id
SQL_FetchString( hQuery, 0, strBuffer, sizeof(strBuffer) );
KvJumpToKey( hStorage, strBuffer, true );
KvSetNum( hStorage, "enabled", 1 );
}
KvRewind( hStorage );
}
public SQL_ErrorCheck( Handle:hOwner, Handle:hQuery, const String:strError[], any:data )
if( hQuery == INVALID_HANDLE )
LogError( "SQL Error: %s", strlen(strError)>0?strError:"Unknown" );
stock bool:IsValidClient( iClient )
{
if( iClient <= 0 ) return false;
if( iClient > MaxClients ) return false;
if( !IsClientConnected(iClient) ) return false;
if( !IsClientInGame(iClient) ) return false;
return !IsFakeClient(iClient);
}