Страница 1 от 1

Изработка на Spec Bots, който не ги засяга mp_autoteambalance 2.

Публикувано на: 02 Май 2020, 23:38
от sf4n
Мисля, че е достатъчно ясно какво искам от заглавието, но все пак да разтегна локумите и да обясня на широко, трябва ми spec bot-ове, който не ги засяга mp_autoteambalance "2", ползвах един plugin, но team balance ги хвърля като CТ,Т. За това реших да попитам тук ако може някой да ми изработи такъв Plugin.

Изработка на Spec Bots, който не ги засяга mp_autoteambalance 2.

Публикувано на: 03 Май 2020, 00:02
от mi0
Не мислиш ли, че ще е по-добре, да дадеш единия плъгин, а ние да го направим недосегаем? Понеже писането на нов отнема доста повече време.

Изработка на Spec Bots, който не ги засяга mp_autoteambalance 2.

Публикувано на: 03 Май 2020, 00:42
от sf4n
Заповядай. Ако може да направиш и да не ги киква дори при пълен сървър. Защото сега ги киква когато влизат определен брой играчи.

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <cstrike>
#include <amxmodx>
#include <fakemeta>

#if defined client_disconnected
    #define client_disconnect client_disconnected
#endif

enum _:Bots
{
    FromPlayers,
    ToPlayers,
    BotsNum,
}

new const g_eBots[][Bots] =
{
    { 4, 32, -1 },
    { 3, 3, 1 },
    { 2, 2, 2 },
    { 1, 1, 5 },
    { 0, 0, -1 }
}

new const g_szBotNames[][32] = 
{
    "Server IP: xx.xxx.xx.xx:27015",
    "Forum: http://www.amxx-bg.info/forum",
}

new g_iPlayers, g_iBots

public plugin_init()
    register_plugin("SpecBots", "1.0", "OciXCrom @ amxx-bg.info/forum")

public client_connect(id)
{
    if(!is_user_bot(id))
        g_iPlayers++
        
    set_task(3.0, "CountBots")
}
    
public client_disconnect(id)
{
    if(!is_user_bot(id))
        g_iPlayers--
        
    CountBots()
    set_task(1.0, "CountBots")
}

public CountBots()
{
    static i, j
    
    for(i = 0; i < sizeof(g_eBots); i++)
    {
        if(g_eBots[i][FromPlayers] <= g_iPlayers <= g_eBots[i][ToPlayers])
        {
            if(g_eBots[i][BotsNum] == g_iBots)
                break
                
            RemoveBots()
            
            if(g_eBots[i][BotsNum] == -1)
                break
                
            for(j = 0; j < clamp(g_eBots[i][BotsNum], .max = sizeof(g_szBotNames)); j++)
                CreateBot(g_szBotNames[j])
                
            break
        }
    }
}

RemoveBots()
{
    static iPlayers[32], iPnum, i
    get_players(iPlayers, iPnum, "d")
    
    for(i = 0; i < iPnum; i++)
        server_cmd("kick #%i", get_user_userid(iPlayers[i]))
        
    g_iBots = 0
}

CreateBot(const szName[])
{
    static szReason[128], id
    id = engfunc(EngFunc_CreateFakeClient, szName)
    engfunc(EngFunc_FreeEntPrivateData, id)
    set_pev(id, pev_flags, pev(id, pev_flags) | FL_FAKECLIENT)
    dllfunc(DLLFunc_ClientConnect, id, szName, "127.0.0.1", szReason)
    dllfunc(DLLFunc_ClientPutInServer, id)
    g_iBots++
}

Изработка на Spec Bots, който не ги засяга mp_autoteambalance 2.

Публикувано на: 03 Май 2020, 11:14
от hackera457

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <cstrike>
#include <amxmodx>
#include <fakemeta>

#if defined client_disconnected
    #define client_disconnect client_disconnected
#endif

enum _:Bots
{
    FromPlayers,
    ToPlayers,
    BotsNum,
}

new const g_eBots[][Bots] =
{
    { 4, 32, -1 },
    { 3, 3, 1 },
    { 2, 2, 2 },
    { 1, 1, 5 },
    { 0, 0, -1 }
}

new const g_szBotNames[][32] = 
{
    "Server IP: xx.xxx.xx.xx:27015",
    "Forum: http://www.amxx-bg.info/forum",
}

new g_iPlayers, g_iBots

public plugin_init()
    register_plugin("SpecBots", "1.0", "OciXCrom @ amxx-bg.info/forum")

public client_connect(id)
{
    if(!is_user_bot(id))
        g_iPlayers++
        
    set_task(3.0, "CountBots")
}
    
public client_disconnect(id)
{
    if(!is_user_bot(id))
        g_iPlayers--
        
    CountBots()
    set_task(1.0, "CountBots")
}

public CountBots()
{
    static i, j
    
    for(i = 0; i < sizeof(g_eBots); i++)
    {
        if(g_eBots[i][FromPlayers] <= g_iPlayers <= g_eBots[i][ToPlayers])
        {
            if(g_eBots[i][BotsNum] == g_iBots)
                break
                
            //RemoveBots()
            
            if(g_eBots[i][BotsNum] == -1)
                break
                
            for(j = 0; j < clamp(g_eBots[i][BotsNum], .max = sizeof(g_szBotNames)); j++)
                CreateBot(g_szBotNames[j])
                
            break
        }
    }
}

/*RemoveBots()
{
    static iPlayers[32], iPnum, i
    get_players(iPlayers, iPnum, "d")
    
    for(i = 0; i < iPnum; i++)
        server_cmd("kick #%i", get_user_userid(iPlayers[i]))
        
    g_iBots = 0
}
*/

CreateBot(const szName[])
{
    static szReason[128], id
    id = engfunc(EngFunc_CreateFakeClient, szName)
    engfunc(EngFunc_FreeEntPrivateData, id)
    set_pev(id, pev_flags, pev(id, pev_flags) | FL_FAKECLIENT)
    dllfunc(DLLFunc_ClientConnect, id, szName, "127.0.0.1", szReason)
    dllfunc(DLLFunc_ClientPutInServer, id)
    g_iBots++
}

Изработка на Spec Bots, който не ги засяга mp_autoteambalance 2.

Публикувано на: 03 Май 2020, 12:52
от sf4n
Не работи и не показва никакъв проблем в конзолата.

Изработка на Spec Bots, който не ги засяга mp_autoteambalance 2.

Публикувано на: 24 Ное 2020, 22:03
от Siska
sf4n написа: 03 Май 2020, 00:42 Заповядай. Ако може да направиш и да не ги киква дори при пълен сървър. Защото сега ги киква когато влизат определен брой играчи.

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <cstrike>
#include <amxmodx>
#include <fakemeta>

#if defined client_disconnected
    #define client_disconnect client_disconnected
#endif

enum _:Bots
{
    FromPlayers,
    ToPlayers,
    BotsNum,
}

new const g_eBots[][Bots] =
{
    { 4, 32, -1 },
    { 3, 3, 1 },
    { 2, 2, 2 },
    { 1, 1, 5 },
    { 0, 0, -1 }
}

new const g_szBotNames[][32] = 
{
    "Server IP: xx.xxx.xx.xx:27015",
    "Forum: http://www.amxx-bg.info/forum",
}

new g_iPlayers, g_iBots

public plugin_init()
    register_plugin("SpecBots", "1.0", "OciXCrom @ amxx-bg.info/forum")

public client_connect(id)
{
    if(!is_user_bot(id))
        g_iPlayers++
        
    set_task(3.0, "CountBots")
}
    
public client_disconnect(id)
{
    if(!is_user_bot(id))
        g_iPlayers--
        
    CountBots()
    set_task(1.0, "CountBots")
}

public CountBots()
{
    static i, j
    
    for(i = 0; i < sizeof(g_eBots); i++)
    {
        if(g_eBots[i][FromPlayers] <= g_iPlayers <= g_eBots[i][ToPlayers])
        {
            if(g_eBots[i][BotsNum] == g_iBots)
                break
                
            RemoveBots()
            
            if(g_eBots[i][BotsNum] == -1)
                break
                
            for(j = 0; j < clamp(g_eBots[i][BotsNum], .max = sizeof(g_szBotNames)); j++)
                CreateBot(g_szBotNames[j])
                
            break
        }
    }
}

RemoveBots()
{
    static iPlayers[32], iPnum, i
    get_players(iPlayers, iPnum, "d")
    
    for(i = 0; i < iPnum; i++)
        server_cmd("kick #%i", get_user_userid(iPlayers[i]))
        
    g_iBots = 0
}

CreateBot(const szName[])
{
    static szReason[128], id
    id = engfunc(EngFunc_CreateFakeClient, szName)
    engfunc(EngFunc_FreeEntPrivateData, id)
    set_pev(id, pev_flags, pev(id, pev_flags) | FL_FAKECLIENT)
    dllfunc(DLLFunc_ClientConnect, id, szName, "127.0.0.1", szReason)
    dllfunc(DLLFunc_ClientPutInServer, id)
    g_iBots++
}
Как се настройва този плъгин да киква спец ботовете при определен брой играчи и после ботовете сами да се връщат в сървъра ?