Не работают плагины bot_replacer и bot_autoreplacer

Kewn

Участник
Сообщения
321
Реакции
61
Операционная система
Linux
Здравствуйте, друзья!
Не работают плагины bot_replacer и bot_autoreplacer, для игры с использованием ботов на сервере css v34.
Чтобы была возможность захватить бота и играть за него, нужно перезаходить на сервер, ибо за игру даёт возможность только 1 раз захватить бота, даже если на кармане 16000$.

Предоставляю файлы плагина во вложении, помогите у кого так было.
 

Вложения

  • bot_autoreplacer 1.1.1.sp
    2.3 КБ · Просмотры: 10
  • bot_autoreplacer 1.1.1.smx
    5.6 КБ · Просмотры: 5
  • bot_replacer.smx
    5.9 КБ · Просмотры: 7
  • bot_replacer.sp
    2.9 КБ · Просмотры: 7

babka68

Участник
Сообщения
2,124
Реакции
956
Здравствуйте, друзья!
Не работают плагины bot_replacer и bot_autoreplacer, для игры с использованием ботов на сервере css v34.
Чтобы была возможность захватить бота и играть за него, нужно перезаходить на сервер, ибо за игру даёт возможность только 1 раз захватить бота, даже если на кармане 16000$.

Предоставляю файлы плагина во вложении, помогите у кого так было.
Делал как то клиенту, насколько помню была такая же проблема,пробуй
C-подобный:
#include <cstrike>
#include <sdktools>
#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo =  {
    name = "Bot Replacer",
    author = "SenatoR, babka68",
    description = "Игрок может сыграть вместо бота",
    version = "1.2",
    url = "https://vk.com/zakazserver68, hlmod.ru"
}

Handle CheckSpecTimer[MAXPLAYERS + 1];
int BotAmount[MAXPLAYERS + 1], g_iAmountBot, g_iPriceBot;
bool g_bShow_Message_Hud, g_bType_Kick;

public void OnPluginStart() {
    //HookEvent("round_start", EventRoundStart);
    HookEvent("round_end", EventRoundEnd);
    ConVar cvar;
    cvar = CreateConVar("sm_bot_replacer_amount", "1", "Сколько раз за раунд игрок может сыграть вместо бота?", _, true, 0.0, true, 20.0);
    cvar.AddChangeHook(CVarChanged_Amount_Bot);
    g_iAmountBot = cvar.IntValue;
    
    cvar = CreateConVar("sm_bot_replacer_price", "500", "Сколько стоит сыграть за бота?", _, true, 0.0, true, 16000.0);
    cvar.AddChangeHook(CVarChanged_Price_Bot);
    g_iPriceBot = cvar.IntValue;
    
    cvar = CreateConVar("sm_bot_replacer_showhud", "1", "Показывать сообщение, что можно играть за бота?", _, true, 0.0, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Show_Message_Hud);
    g_bShow_Message_Hud = cvar.BoolValue;
    
    cvar = CreateConVar("sm_bot_replacer_typekick", "0", "0 - Кикнуть бота, 1 - Удалить бота", _, true, 0.0, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Type_Kick);
    g_bType_Kick = cvar.BoolValue;
    
    AutoExecConfig(true, "sm_bot_replacer");
}

public void CVarChanged_Amount_Bot(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_iAmountBot = cvar.IntValue;
}

public void CVarChanged_Price_Bot(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_iPriceBot = cvar.IntValue;
}

public void CVarChanged_Show_Message_Hud(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_bShow_Message_Hud = cvar.BoolValue;
}

public void CVarChanged_Type_Kick(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_bType_Kick = cvar.BoolValue;
}

public void OnClientPostAdminCheck(int client) {
    if (!IsFakeClient(client) && g_bShow_Message_Hud)
        CheckSpecTimer[client] = CreateTimer(1.0, Spec_Timer, client, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}

public Action Spec_Timer(Handle timer, any client) {
    int i = 0;
    i = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
    if (i > 0 && IsFakeClient(i) && GetClientTeam(client) == GetClientTeam(i)) {
        PrintHintText(client, "Нажмите E, чтобы играть за бота %N", i);
    }
}

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon) {
    if (buttons & IN_USE && !IsPlayerAlive(client)) {
        int i = 0;
        i = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
        int price = g_iPriceBot;
        int cash = GetEntProp(client, Prop_Send, "m_iAccount");
        if (i > 0 && IsFakeClient(i) && GetClientTeam(client) == GetClientTeam(i) && BotAmount[client] < g_iAmountBot && price <= cash) {
            SetEntProp(client, Prop_Send, "m_iAccount", cash - price);
            int health = GetClientHealth(i);
            int armor = GetClientArmor(i);
            float pos[3];
            GetClientAbsOrigin(i, pos);
            if (g_bType_Kick)
                ServerCommand("bot_kick %N", i);
            else
                KickClient(i);
            CS_RespawnPlayer(client);
            SetEntityHealth(client, health);
            SetEntProp(client, Prop_Data, "m_ArmorValue", armor);
            TeleportEntity(client, pos, NULL_VECTOR, NULL_VECTOR);
            BotAmount[client]++;
        }
    }
}

public void EventRoundEnd(Event event, const char[] name, bool dontBroadcast) {
    for (int i = 1; i <= MaxClients; i++) {
        BotAmount[i] = 0;
    }
}

public void OnClientDisconnect(int client) {
    if (CheckSpecTimer[client] != null) {
        KillTimer(CheckSpecTimer[client]);
        CheckSpecTimer[client] = null;
    }
}
 

Kewn

Участник
Сообщения
321
Реакции
61
Делал как то клиенту, насколько помню была такая же проблема,пробуй
C-подобный:
#include <cstrike>
#include <sdktools>
#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo =  {
    name = "Bot Replacer",
    author = "SenatoR, babka68",
    description = "Игрок может сыграть вместо бота",
    version = "1.2",
    url = "https://vk.com/zakazserver68, hlmod.ru"
}

Handle CheckSpecTimer[MAXPLAYERS + 1];
int BotAmount[MAXPLAYERS + 1], g_iAmountBot, g_iPriceBot;
bool g_bShow_Message_Hud, g_bType_Kick;

public void OnPluginStart() {
    //HookEvent("round_start", EventRoundStart);
    HookEvent("round_end", EventRoundEnd);
    ConVar cvar;
    cvar = CreateConVar("sm_bot_replacer_amount", "1", "Сколько раз за раунд игрок может сыграть вместо бота?", _, true, 0.0, true, 20.0);
    cvar.AddChangeHook(CVarChanged_Amount_Bot);
    g_iAmountBot = cvar.IntValue;
   
    cvar = CreateConVar("sm_bot_replacer_price", "500", "Сколько стоит сыграть за бота?", _, true, 0.0, true, 16000.0);
    cvar.AddChangeHook(CVarChanged_Price_Bot);
    g_iPriceBot = cvar.IntValue;
   
    cvar = CreateConVar("sm_bot_replacer_showhud", "1", "Показывать сообщение, что можно играть за бота?", _, true, 0.0, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Show_Message_Hud);
    g_bShow_Message_Hud = cvar.BoolValue;
   
    cvar = CreateConVar("sm_bot_replacer_typekick", "0", "0 - Кикнуть бота, 1 - Удалить бота", _, true, 0.0, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Type_Kick);
    g_bType_Kick = cvar.BoolValue;
   
    AutoExecConfig(true, "sm_bot_replacer");
}

public void CVarChanged_Amount_Bot(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_iAmountBot = cvar.IntValue;
}

public void CVarChanged_Price_Bot(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_iPriceBot = cvar.IntValue;
}

public void CVarChanged_Show_Message_Hud(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_bShow_Message_Hud = cvar.BoolValue;
}

public void CVarChanged_Type_Kick(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_bType_Kick = cvar.BoolValue;
}

public void OnClientPostAdminCheck(int client) {
    if (!IsFakeClient(client) && g_bShow_Message_Hud)
        CheckSpecTimer[client] = CreateTimer(1.0, Spec_Timer, client, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}

public Action Spec_Timer(Handle timer, any client) {
    int i = 0;
    i = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
    if (i > 0 && IsFakeClient(i) && GetClientTeam(client) == GetClientTeam(i)) {
        PrintHintText(client, "Нажмите E, чтобы играть за бота %N", i);
    }
}

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon) {
    if (buttons & IN_USE && !IsPlayerAlive(client)) {
        int i = 0;
        i = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
        int price = g_iPriceBot;
        int cash = GetEntProp(client, Prop_Send, "m_iAccount");
        if (i > 0 && IsFakeClient(i) && GetClientTeam(client) == GetClientTeam(i) && BotAmount[client] < g_iAmountBot && price <= cash) {
            SetEntProp(client, Prop_Send, "m_iAccount", cash - price);
            int health = GetClientHealth(i);
            int armor = GetClientArmor(i);
            float pos[3];
            GetClientAbsOrigin(i, pos);
            if (g_bType_Kick)
                ServerCommand("bot_kick %N", i);
            else
                KickClient(i);
            CS_RespawnPlayer(client);
            SetEntityHealth(client, health);
            SetEntProp(client, Prop_Data, "m_ArmorValue", armor);
            TeleportEntity(client, pos, NULL_VECTOR, NULL_VECTOR);
            BotAmount[client]++;
        }
    }
}

public void EventRoundEnd(Event event, const char[] name, bool dontBroadcast) {
    for (int i = 1; i <= MaxClients; i++) {
        BotAmount[i] = 0;
    }
}

public void OnClientDisconnect(int client) {
    if (CheckSpecTimer[client] != null) {
        KillTimer(CheckSpecTimer[client]);
        CheckSpecTimer[client] = null;
    }
}
Всё равно получается только раз за сессию зайти за бота.

Есть оповещение "нажатие е, чтобы захватить бота", но после клика по "е", ничего не происходит.
 

babka68

Участник
Сообщения
2,124
Реакции
956
Всё равно получается только раз за сессию зайти за бота.

Есть оповещение "нажатие е, чтобы захватить бота", но после клика по "е", ничего не происходит.
только что протестировал,все работает корректно
Игра css v92
SourceMod Version: 1.10.0.6528
 
Сверху Снизу