I decided to write up an example of one that is like the link provided above, but also has support for removing the data after X minutes since the player left.
Code:
#include < amxmodx >
#include < amxmisc >
const TASK_ID_REMOVE = 1337;
new Array:g_aReconnectSteamIDs;
new Trie:g_tArrayPos;
new g_iArraySize;
public plugin_init( )
{
g_aReconnectSteamIDs = ArrayCreate( 35 );
g_tArrayPos = TrieCreate( );
}
public plugin_end( )
{
ArrayDestroy( g_aReconnectSteamIDs );
TrieDestroy( g_tArrayPos );
}
public client_authorized( client )
{
static szAuthid[ 35 ];
get_user_authid( client, szAuthid, 34 );
static iArrayPos;
if( !TrieGetCell( g_tArrayPos, szAuthid, iArrayPos ) )
{
return;
}
// client reconnected
RemoveReconnect( szAuthid, iArrayPos )
}
public client_disconnect( client )
{
static szAuthid[ 35 ];
get_user_authid( client, szAuthid, 34 );
set_task( 60.0, "TaskRemoveReconnect", TASK_ID_REMOVE + AddReconnect( szAuthid ) );
}
public TaskRemoveReconnect( iTaskId )
{
RemoveReconnect( _, ( iTaskId - TASK_ID_REMOVE ) );
}
AddReconnect( szGivenAuthid[ ] )
{
static szAuthid[ 35 ], iArrayPos;
for( iArrayPos = 0; iArrayPos < g_iArraySize; iArrayPos++ )
{
ArrayGetString( g_aReconnectSteamIDs, iArrayPos, szAuthid, 34 );
if( !szAuthid[ 0 ] )
{
ArraySetString( g_aReconnectSteamIDs, iArrayPos, szGivenAuthid );
TrieSetCell( g_tArrayPos, szGivenAuthid, iArrayPos );
return iArrayPos;
}
}
iArrayPos = g_iArraySize++;
ArrayPushString( g_aReconnectSteamIDs, szGivenAuthid );
TrieSetCell( g_tArrayPos, szGivenAuthid, iArrayPos );
return iArrayPos;
}
RemoveReconnect( szGivenAuthid[ ]="", iGivenArrayPos=-1 )
{
static szAuthid[ 35 ], iArrayPos;
copy( szAuthid, 34, szGivenAuthid );
iArrayPos = iGivenArrayPos;
if( !szAuthid[ 0 ] )
{
if( iArrayPos < 0 )
{
return;
}
ArrayGetString( g_aReconnectSteamIDs, iArrayPos, szAuthid, 34 );
}
else if( iArrayPos < 0 )
{
if( !TrieGetCell( g_tArrayPos, szAuthid, iArrayPos ) )
{
return;
}
}
ArraySetString( g_aReconnectSteamIDs, iArrayPos, "" );
TrieDeleteKey( g_tArrayPos, szAuthid );
remove_task( TASK_ID_REMOVE + iArrayPos );
}