it should prevent the player from choosing team and send them to spectators, but it doesn't work as I wanted, can anyone help me?
Code:
#include <sourcemod>
#include <steamworks>
#include <multicolors>
#include <cstrike>
char apiTimeUrl[256] , apiSecretUrl[256] , apiSecretToken[64] , adminFlag[26];
ConVar c_secretProfilLogin , c_playedTimeLogin , c_apiSecretToken , c_adminLoginFlags;
StringMap adminFlags;
bool g_bCantJoinTeam[MAXPLAYERS +1];
#define CSGO_TEAM_SPECTATE 1
#pragma newdecls required
public void OnPluginStart()
{
HookEvent("player_team", OnTeamChange, EventHookMode_Pre);
AddCommandListener(Listener_JoinTeam, "jointeam");
LoadTranslations("gizli_profil.phrases");
setFlags();
c_apiSecretToken = CreateConVar("secret_api_key" , "");
c_playedTimeLogin = CreateConVar("secret_time", "400");
c_secretProfilLogin = CreateConVar("secret_login", "1");
c_adminLoginFlags = CreateConVar("secret_admin_flags" , "a" );
AutoExecConfig(true, "gizli_profil", "sourcemod");
Format( apiTimeUrl , 256 , "http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key={key}&appids_filter[0]={game}&steamid={steamid}&format=json" );
Format( apiSecretUrl , 256 , "http://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key={key}&steamid={steamid}&relationship=friend&format=json" );
}
public void OnClientPostAdminCheck (int client)
{
g_bCantJoinTeam[client] = false;
checkPlayerSecretProfil( client );
}
stock void getTimeApiFormat(char[] steamid , char[] str , int len)
{
c_apiSecretToken.GetString( apiSecretToken , 64 );
Format( str , len , apiTimeUrl);
ReplaceString(str, len, "{key}", apiSecretToken);
ReplaceString(str, len, "{game}", "730");
ReplaceString(str, len, "{steamid}", steamid);
}
stock void getSecretApiFormat(char[] steamid , char[] str , int len)
{
c_apiSecretToken.GetString( apiSecretToken , 64 );
Format( str , len , apiSecretUrl);
ReplaceString(str, len, "{key}", apiSecretToken);
ReplaceString(str, len, "{steamid}", steamid);
}
void checkPlayerSecretProfil( int clientID )
{
char steamid[18];
if( GetClientAuthId(clientID, AuthId_SteamID64, steamid , 18) )
{
if ( !checkAdminFlags( GetUserFlagBits( clientID ) ) )
{
if( c_playedTimeLogin.IntValue != 0 )
playedTimeControl( steamid , clientID );
if( c_secretProfilLogin.IntValue != 0 )
secretProfilControl( steamid , clientID );
}
}
}
bool checkAdminFlags( int flag )
{
int value;
char _value[30];
c_adminLoginFlags.GetString( adminFlag , 30 );
for( int i = 0; i < sizeof( adminFlag ); i++ )
{
if( adminFlag[ i ] == 0 )
return false;
_value = substr( adminFlag , i , 1 );
adminFlags.GetValue( _value , value);
if( flag & value )
return true;
}
return false;
}
void setFlags()
{
adminFlags = new StringMap();
adminFlags.SetValue("a" , ADMFLAG_RESERVATION );
adminFlags.SetValue("b" , ADMFLAG_GENERIC );
adminFlags.SetValue("c" , ADMFLAG_KICK );
adminFlags.SetValue("d" , ADMFLAG_BAN );
adminFlags.SetValue("e" , ADMFLAG_UNBAN );
adminFlags.SetValue("f" , ADMFLAG_SLAY );
adminFlags.SetValue("g" , ADMFLAG_CHANGEMAP );
adminFlags.SetValue("h" , ADMFLAG_CONVARS );
adminFlags.SetValue("i" , ADMFLAG_CONFIG );
adminFlags.SetValue("j" , ADMFLAG_CHAT );
adminFlags.SetValue("k" , ADMFLAG_VOTE );
adminFlags.SetValue("l" , ADMFLAG_PASSWORD );
adminFlags.SetValue("m" , ADMFLAG_RCON );
adminFlags.SetValue("n" , ADMFLAG_CHEATS );
adminFlags.SetValue("z" , ADMFLAG_ROOT );
adminFlags.SetValue("o" , ADMFLAG_CUSTOM1 );
adminFlags.SetValue("p" , ADMFLAG_CUSTOM2 );
adminFlags.SetValue("q" , ADMFLAG_CUSTOM3 );
adminFlags.SetValue("r" , ADMFLAG_CUSTOM4 );
adminFlags.SetValue("s" , ADMFLAG_CUSTOM5 );
adminFlags.SetValue("t" , ADMFLAG_CUSTOM6 );
}
stock char substr(char[] inpstr, int startpos, int len=-1)
{
char outstr[20];
strcopy(outstr, 20 , inpstr[startpos]);
outstr[len] = 0;
return outstr;
}
void secretProfilControl( char[] steamid , int clientID )
{
char apiFormatUrl[256];
getSecretApiFormat(steamid , apiFormatUrl , 256);
Handle request = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, apiFormatUrl);
if( request )
{
SteamWorks_SetHTTPRequestContextValue(request, clientID);
SteamWorks_SetHTTPCallbacks(request, secretProfil_OnHTTPResponse);
SteamWorks_SendHTTPRequest(request);
}
}
void playedTimeControl(char[] steamid , int clientID )
{
char apiFormatUrl[256];
getTimeApiFormat(steamid , apiFormatUrl , 256);
Handle request = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, apiFormatUrl);
if( request )
{
SteamWorks_SetHTTPRequestContextValue(request, clientID);
SteamWorks_SetHTTPCallbacks(request, TimePlayed_OnHTTPResponse);
SteamWorks_SendHTTPRequest(request);
}
}
public void TimePlayed_OnHTTPResponse(Handle request, bool bFailure, bool bRequestSuccessful, EHTTPStatusCode eStatusCode,int client)
{
if ( bFailure || !bRequestSuccessful || eStatusCode != k_EHTTPStatusCode200OK )
{
CloseHandle(request);
return;
}
int iBufferSize = 0;
SteamWorks_GetHTTPResponseBodySize(request, iBufferSize);
char[] result = new char[iBufferSize];
SteamWorks_GetHTTPResponseBodyData(request, result, iBufferSize);
int playedTime = playedGetTimeUser( result );
playedTime = playedTime / 60
if( playedTime <= 0 )
{
if( c_secretProfilLogin.IntValue != 0 )
CPrintToChatAll("%t", "Profil Gizli Chat Mesaj", client);
g_bCantJoinTeam[client] = true;
}
else if( playedTime > 0 )
{
if( c_playedTimeLogin.IntValue > 0 && playedTime < c_playedTimeLogin.IntValue)
{
CPrintToChatAll("%t", "Oyun Saati Düsük Mesaj", client, playedTime, c_playedTimeLogin.IntValue);
g_bCantJoinTeam[client] = true;
}
else if(c_playedTimeLogin.IntValue > 0 && playedTime >= c_playedTimeLogin.IntValue)
{
CPrintToChatAll("%t", "Oyun Saati Bilgi Mesaj", client, playedTime, c_playedTimeLogin.IntValue);
}
}
else if( !playedTime )
{
g_bCantJoinTeam[client] = true;
}
CloseHandle(request);
return;
}
public void secretProfil_OnHTTPResponse(Handle request, bool bFailure, bool bRequestSuccessful, EHTTPStatusCode eStatusCode,int client)
{
if( eStatusCode == k_EHTTPStatusCode401Unauthorized )
{
if( c_secretProfilLogin.IntValue != 0)
CPrintToChatAll("%t", "Profil Gizli Chat Mesaj", client);
g_bCantJoinTeam[client] = true;
CloseHandle(request);
return;
}
else if ( bFailure || !bRequestSuccessful || eStatusCode != k_EHTTPStatusCode200OK )
{
CloseHandle(request);
return;
}
int iBufferSize = 0;
SteamWorks_GetHTTPResponseBodySize(request, iBufferSize);
char[] result = new char[iBufferSize];
SteamWorks_GetHTTPResponseBodyData(request, result, iBufferSize);
int secretProfile = secretProfileUser( result );
if( c_secretProfilLogin.IntValue != 0 && secretProfile)
CPrintToChatAll("%t", "Profil Gizli Chat Mesaj", client);
g_bCantJoinTeam[client] = true;
CloseHandle(request);
return;
}
public Action Listener_JoinTeam(int client, const char[] command, int args)
{
if(g_bCantJoinTeam[client])
{
/*if (GetEventInt(event, "team") != CS_TEAM_SPECTATOR)
{*/
if (client > 0)
{
if (IsClientInGame(client) && !IsFakeClient(client))
{
CreateTimer(0.1, OnTeamChangeDelay, client, TIMER_FLAG_NO_MAPCHANGE);
}
}
/*}*/
}
/*if(g_bCantJoinTeam[client])
{
CPrintToChat(client, "%t", "Profil Gizli Chat Mesaj Client");
CS_SwitchTeam(client, CS_TEAM_SPECTATOR);
}
return Plugin_Continue;*/
}
/*public Action OnTeamChange(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if(g_bCantJoinTeam[client])
{
CPrintToChat(client, "%t", "Profil Gizli Chat Mesaj Client");
//ChangeClientTeam(client, CS_TEAM_SPECTATOR);
CS_SwitchTeam(client, CS_TEAM_SPECTATOR);
}
return Plugin_Continue;
}*/
public Action OnTeamChangeDelay(Handle timer, any client)
{
ChangeClientTeam(client, CSGO_TEAM_SPECTATE);
CPrintToChat(client, "%t", "Profil Gizli Chat Mesaj Client");
return Plugin_Handled;
}
public Action OnTeamChange(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(GetEventInt(event, "userid"));
if(g_bCantJoinTeam[client])
{
if (GetEventInt(event, "team") != CS_TEAM_SPECTATOR)
{
if (client > 0)
{
if (IsClientInGame(client) && !IsFakeClient(client))
{
CreateTimer(0.1, OnTeamChangeDelay, client, TIMER_FLAG_NO_MAPCHANGE);
}
}
}
}
}
bool secretProfileUser( char[] result )
{
char str2[2][64];
ExplodeString(result, "\"friendslist\"", str2, sizeof(str2), sizeof(str2[]));
if( !StrEqual(str2[1] , "") )
return false;
return true;
}
int playedGetTimeUser( char[] result )
{
char str2[2][64];
ExplodeString(result, "\"playtime_forever\":", str2, sizeof(str2), sizeof(str2[]));
if( !StrEqual(str2[1] , "") )
{
char lastString[2][64];
ExplodeString(str2[1], "}", lastString, sizeof(lastString), sizeof(lastString[]));
return StringToInt( lastString[0] );
}
return -1;
}