#include < amxmodx >
#include < cstrike >
#include < fakemeta >
 
enum Cvars
{
    botname1,
    botname2,
    minplayers,
    starttime,
    endtime,
    onecon,
    onebot,
    norounds
};
 
new const cvar_names[ Cvars ][] =
{
    "amx_botname",
    "amx_botname2",
    "amx_minplayers",
    "amx_starttime",
    "amx_endtime",
    "amx_onecon",
    "amx_onebot",
    "amx_norounds"
};
 
new const cvar_defaults[ Cvars ][] =
{
    "Bot",
    "Bot 2",
    "10",
    "00",
    "12",
    "0",
    "0",
    "0"
};
 
new cvar_pointer[ Cvars ];
new bool:g_isTime = false;
new bool:g_ePlayers = false;
new bool:g_isFirstRound = true;
new g_BotNum = 0, g_maxplayers, g_bID1, g_bID2;
 
new const g_ConfigFile[] = "addons/amxmodx/configs/kgbbots.cfg"
 
public plugin_init() 
{
    register_plugin("KGB Bots", "2.3", "OvidiuS & Desikac")
    register_cvar("kgbbots", "1" , (FCVAR_SERVER|FCVAR_SPONLY))
    
    register_logevent("Event_RoundEnd", 2, "1=Round_End");
    register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
    
    for ( new Cvars:i = botname1 ; i < Cvars ; i++ )
        cvar_pointer[ i ] = register_cvar( cvar_names[ i ] , cvar_defaults[ i ] );
    
    g_maxplayers = get_maxplayers();
    server_cmd("exec %s", g_ConfigFile)
    set_task(3.0, "isit")
}
 
public isit() {
    if(get_pcvar_num(cvar_pointer[norounds]))
        set_task(30.0, "CheckConditions",0,"",0,"b")
}
 
public plugin_precache() 
{
    if(!file_exists(g_ConfigFile)) 
    {
      write_file(g_ConfigFile, "KGB Bots - BeállĂtások^n")
      write_file(g_ConfigFile, "amx_botname ^"KGB Bot1^"   //ElsĹ‘ bot neve")
      write_file(g_ConfigFile, "amx_botname2 ^"KGB Bot2^"   //Második bot neve")
      write_file(g_ConfigFile, "amx_minplayers ^"10^"   //Ennyi játĂ©kostĂłl dobja ki a szerver a botokat. Ha,kevesebb lesz a lĂ©tszám akkor vissza jönnek!")
      write_file(g_ConfigFile, "amx_starttime ^"0^"   //Hány ĂłrátĂłl legyenek fent a botok a szerĂłn")
      write_file(g_ConfigFile, "amx_endtime ^"12^"   //Hány Ăłrán át legyenek botok?")
      write_file(g_ConfigFile, "amx_onecon ^"0^"   //A kezdĂ©si idĹ‘ Ă©s minplayers lĂ©tszám feltĂ©teleknek muszáj egyĂĽttesen teljesĂĽlniĂĽk a botok berakásához[0 -nem, 1 -igen]")
      write_file(g_ConfigFile, "amx_onebot ^"0^"   //Egy bot menjen csak fel a szerverre?[0 -nem, 1 -igen]") 
      write_file(g_ConfigFile, "amx_norounds ^"0^"   //VĂ©gtelen köridĹ‘ (0-1) (ellenĹ‘rzĂ©s 30mp-enkĂ©nt)[0 -nem, 1 -igen]")
    }
}
 
public Event_RoundEnd()
{
    if (!g_isFirstRound)
        return;
 
    g_isFirstRound = false;
}
 
public Event_NewRound()
{
    if(g_isFirstRound)
        return;
        
    CheckConditions();
}
 
public CheckConditions()
{
    static iHours, m, s
    time(iHours, m, s)
 
    new iMin = get_pcvar_num(cvar_pointer[ starttime ]);
    new iMax = get_pcvar_num(cvar_pointer[ endtime ]);
    
    if(iMin == iMax)
        g_isTime = true;
    else if(iMin > iMax) 
    {
        switch(iHours) 
        {
            case 0..11: 
            {
                if(iMin >= iHours && iMax > iHours)
                    g_isTime = true;
            }
            case 12..23: 
            {
                if(iMin <= iHours && iMax < iHours)
                    g_isTime = true;
            }
        }
    }
    else if(iMin <= iHours && iMax > iHours)
        g_isTime = true;
    else 
        g_isTime = false;
        
    new iNum, iPlayers[32];
    get_players(iPlayers, iNum, "c");
    
    if(iNum <= get_pcvar_num(cvar_pointer[minplayers]))
        g_ePlayers = true;
    else
        g_ePlayers = false;
 
    if(g_maxplayers - iNum < 2)
        g_ePlayers = false;
    
    if(get_pcvar_num(cvar_pointer[minplayers]) == 0)
        g_ePlayers = true
    
    new iCondition = get_pcvar_num(cvar_pointer[ onecon ]);
    if( (!g_ePlayers && g_isTime || !g_isTime && g_ePlayers) && iCondition) 
    {
        g_isTime = true;
        g_ePlayers = true;
    }
    
    
        
    if((g_isTime && g_ePlayers) && !g_BotNum)
    {
        if(!get_pcvar_num(cvar_pointer[onebot]))
            set_task(1.5, "Task_AddBot")
        set_task(2.8, "Task_AddBot")
    }
    else if((!g_isTime || !g_ePlayers) && 0 < g_BotNum <= 2 )
    {
        g_BotNum = 0;
        server_cmd("kick #%d", g_bID1)
        server_cmd("kick #%d", g_bID2)
    }
}
 
public Task_AddBot()
{
    static iBot;
    new iBotName[35];
    
    switch(g_BotNum)
    {
        case 0: get_pcvar_string(cvar_pointer[ botname1 ], iBotName, charsmax( iBotName ));
        case 1: get_pcvar_string(cvar_pointer[ botname2 ], iBotName, charsmax( iBotName ));
        case 2: return;
    }
 
    iBot = engfunc( EngFunc_CreateFakeClient, iBotName );
    
    if(!iBot)
        return;
        
    dllfunc( MetaFunc_CallGameEntity, "player", iBot );
    set_pev( iBot, pev_flags, FL_FAKECLIENT );
 
    set_pev( iBot, pev_model, "" );
    set_pev( iBot, pev_viewmodel2, "" );
    set_pev( iBot, pev_modelindex, 0 );
 
    set_pev( iBot, pev_renderfx, kRenderFxNone );
    set_pev( iBot, pev_rendermode, kRenderTransAlpha );
    set_pev( iBot, pev_renderamt, 0.0 );
 
    set_pdata_int( iBot, 114, 3 );
    cs_set_user_team( iBot, CS_TEAM_UNASSIGNED );
    
    switch(g_BotNum) 
    {
        case 0: g_bID1 = get_user_userid(iBot);
        case 1: g_bID2 = get_user_userid(iBot);
    }
    g_BotNum++;
    }