Написание плагинов

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Можно как нибудь ломать цикл, если хотя бы у одного игрока?
как-то так:
PHP:
public void entity_visible(Event event, const char [] name, bool dontBroadcast)
{
    hasVisibleThreats = false;
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && IsPlayerAlive(client) && (GetClientTeam(client) == 2 || IsInfected(client, ZOMBIECLASS_TANK)))
        for(int i = 1; i <= MaxClients; i++)
            if(i != client && IsClientInGame(i) && (GetClientTeam(i) == 2 || IsInfected(i, ZOMBIECLASS_TANK)) && GetEntProp(i, Prop_Send, "m_hasVisibleThreats"))
            {
                hasVisibleThreats = true;
                break;
            }
    PrintToChatAll(hasVisibleThreats ? "true" : "false")
}

int IsInfected(int client, int type)
{
    return GetClientTeam(client) == 3 && type == GetEntProp(client, Prop_Send, "m_zombieClass");
}
 

Truyn

King of clowns
Сообщения
1,591
Реакции
749
Кто может вырезать из этого плагина grab? [ANY/CSS] EntControl(like grabbermod,NPCs,BuildIn-WEBSERVER,...) (Updated 2014-05-09) - AlliedModders
И сделать отдельным плагином
[ANY] Hook Grab Rope (1.1.4) - AlliedModders думаю стоит просить сделать из этого.
Да и в нем насколько я помню можно отключать,или дать определенно кому то доступ только к грабу.
 

Stepan1

Участник
Сообщения
84
Реакции
2
Добрый кто может добавить в этот плагин что бы он включался и отключался через команду !radar
--- Добавлено позже ---
И так кто может во втором плагине сделать звук нормально что бы работал и когда нажимаешь на е показывало через сколько можно будет наносить граффити
 

Вложения

  • radar_block.sp
    1.3 КБ · Просмотры: 13
  • [CSGO] grafiti.sp
    12.3 КБ · Просмотры: 10

x330122

Участник
Сообщения
357
Реакции
152
Как можно из плагина выписать бан в Sourcebans по полученному steamid ???
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Tetragromaton, вручную подключиться к базе, выполнить запрос, отключиться.
 

Innomeni

Участник
Сообщения
320
Реакции
42
Прошу помощи.
Есть плагин парашюта, есть попытка переделать под крылья (wings), но что-то идет не так (модельки нет, она где-то за пределами добра и зла).
Прошу наставить на путь истинный (50р на телефон за помощь не пожалею).
оригинал
то, что получилось
модельки крыльев
 

wightjeck

Костыли заказывали?
Сообщения
472
Реакции
154
Ребят, кто знает как это исправить?
Смотрел инклюд, натив там пристутствует.
C-подобный:
[SM] Unable to load plugin "influx_hud/influx_hud_draw_advanced.smx": Native "HMCM_Register" was not found
 

Mr_panica

XenForo one 💖
Сообщения
921
Реакции
435
А инклюд принадлежит influx_hud_draw_advanced.smx? Просто если к другому, то он тоже должен быть на сервере.
 

wightjeck

Костыли заказывали?
Сообщения
472
Реакции
154
А инклюд принадлежит influx_hud_draw_advanced.smx? Просто если к другому, то он тоже должен быть на сервере.
Мне скинули недостающий плагин.
--- Добавлено позже ---
Ребят, кто разбирается, помогите пофиксить, пожалуйста
C-подобный:
L 03/11/2019 - 17:32:26: [influx_hud/influx_hud_draw_advanced.smx] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
L 03/11/2019 - 17:32:26: [influx_hud/influx_hud_draw_advanced.smx] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
L 03/11/2019 - 17:32:26: [influx_hud/influx_hud_draw_advanced.smx] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
L 03/11/2019 - 17:32:26: [SM] Exception reported: [Influx] HUD SQL INSERT ERROR!
QERY: INSERT INTO inf_huds (uid,style,hsm, hwr, hpb, hkeys, hsync, hstages, hjumps, hspeed, hstrafes, hrank, hspec) VALUES ('0','0','1','1','1','1','1','1','-1','1','-1','1','1')
L 03/11/2019 - 17:32:26: [SM] Blaming: influx_hud/influx_hud_draw_advanced.smx
L 03/11/2019 - 17:32:26: [SM] Call stack trace:
L 03/11/2019 - 17:32:26: [SM]   [0] SetFailState
L 03/11/2019 - 17:32:26: [SM]   [1] Line 345, D:\Server\csgo\addons\sourcemod\scripting\influx_hud_draw_advanced.sp::InsertHudSettings
L 03/11/2019 - 17:32:26: [SM]   [2] Line 83, D:\Server\csgo\addons\sourcemod\scripting\influx_hud_draw_advanced.sp::OnClientAuthorized
 

Вложения

  • influx_hud_draw_advanced.sp
    39 КБ · Просмотры: 15
Последнее редактирование:

Туник

Участник
Сообщения
1,281
Реакции
263
Есть ли у кого модуль для вип
для замены иконок убийства? Или кто может написать подобное?
 

Вложения

  • Снимок.PNG
    Снимок.PNG
    5.6 КБ · Просмотры: 56

Mr_panica

XenForo one 💖
Сообщения
921
Реакции
435
Есть плагин, который устанавливает точки телепортации, но беда в том, что если противник увидел, где в первый раз появился игрок, то он может кемперить его, что нужно то:
Чтоб если в радиусе N от точки телепортации есть игрок из противоположной команды, то телепортация становилась невозможной.

Игра: Team Fortress 2
 

Вложения

  • TeleportMod.sp
    3.9 КБ · Просмотры: 5

Truyn

King of clowns
Сообщения
1,591
Реакции
749
Я бы прям поцеловал того кто сможет мне помочь.
Нужно заблочить команду +jump.
Block +left and +right - AlliedModders мб как то по аналогии этого плагина можно? (
--- Добавлено позже ---
Есть ли у кого модуль для вип
для замены иконок убийства? Или кто может написать подобное?
Да конечно [CS: GO] - Kill icons к @Samoletik1337 обращайся.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Oligarx1488, пробуй:
PHP:
#include <sdktools_hooks>

public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapon)
{
	if(buttons & IN_JUMP) buttons &= ~IN_JUMP;
}
 

Stepan1

Участник
Сообщения
84
Реакции
2
Кто может помочь ?
1/ Плагин radar_block нужно в нем добавить что бы игрок мог включить и выключить радар :)
2/ Плагин [CSGO] grafiti нужно в нем сделать что бы при использование граффити звук работал нормально + сделать если нажимать на бинде на букву у он показывает что ты нанес его но не показывает через сколько секунд можно его использовать.
3/ Плагин AntiAfk добавить цвет от феникса csgocolors

Игра: Counter-Strike: Global Offensive в Steam
 

Вложения

  • [CSGO] grafiti.sp
    12.3 КБ · Просмотры: 6
  • radar_block.sp
    1.3 КБ · Просмотры: 2
  • AntiAfk.sp
    6 КБ · Просмотры: 6

panikajo

Участник
Сообщения
866
Реакции
231
Кто может помочь ?
1/ Плагин radar_block нужно в нем добавить что бы игрок мог включить и выключить радар :)
2/ Плагин [CSGO] grafiti нужно в нем сделать что бы при использование граффити звук работал нормально + сделать если нажимать на бинде на букву у он показывает что ты нанес его но не показывает через сколько секунд можно его использовать.
3/ Плагин AntiAfk добавить цвет от феникса csgocolors

Игра: Counter-Strike: Global Offensive в Steam
Вот далее в трансиле укажешь {GREEN},{DEFAULT} ну и как тебе нравится.
чтобы скомпилировать скинь в include csgo_colors
PHP:
#include <sdktools_functions>
#include <csgo_colors>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo = {name = "AntiAfk", author = "Drumanid", version = "2.2", url = "http://vk.com/drumanid"}

Handle g_hTimer[MAXPLAYERS +1];
bool g_bAfk[MAXPLAYERS +1];
int g_iTime[MAXPLAYERS +1], g_iLimit[MAXPLAYERS +1];
int cv_iTime, cv_iLimit, cv_iPunish;
char g_sTranslite[192], cv_sFlagKill[4], cv_sFlagChange[4], cv_sFlagKick[4], cv_sFlagAll[4];

public void OnPluginStart()
{
    HookEvent("player_spawn", PlayerSpawn);
    HookEvent("cs_win_panel_match", CSWinPanelMatch, EventHookMode_PostNoCopy);

    ConVar cv;
    (cv = CreateConVar("AA_TIME", "30", "RU: Время перед наказанием | EN: Time of punishment", _, true, 10.0, true, 120.0)).AddChangeHook(Cvar_iTime);
    cv_iTime = cv.IntValue;
    (cv = CreateConVar("AA_LIMIT", "3", "RU: Предупреждения | EN: Warning", _, true, 2.0, true, 6.0)).AddChangeHook(Cvar_iLimit);
    cv_iLimit = cv.IntValue;
    (cv = CreateConVar("AA_PUNISH", "1", "RU: 0 - Кикать / 1 - Перевести в наблюдатели | EN: 0 - Kicked / 1 - Change team 1(spec)", _, true, 0.0, true, 1.0)).AddChangeHook(Cvar_iPunish);
    cv_iPunish = cv.IntValue;
    (cv = CreateConVar("AA_FLAGKILL", "o", "RU: Флаг - иммунитет от убийства | EN: Flag - immunity from murder")).AddChangeHook(Cvar_sFlagKill);
    cv.GetString(cv_sFlagKill, sizeof(cv_sFlagKill));
    (cv = CreateConVar("AA_FLAGCHANGE", "p", "RU: Флаг - иммунитет от изменения команды | EN: Flag - immunity from team change")).AddChangeHook(Cvar_sFlagChange);
    cv.GetString(cv_sFlagChange, sizeof(cv_sFlagChange));
    (cv = CreateConVar("AA_FLAGKICK", "q", "RU: Флаг - иммунитет от кика | EN: Flag - immunity from kick")).AddChangeHook(Cvar_sFlagKick);
    cv.GetString(cv_sFlagKick, sizeof(cv_sFlagKick));
    (cv = CreateConVar("AA_FLAGALL", "z", "RU: Флаг - иммунитет от всего | EN: Flag - immunity from everything")).AddChangeHook(Cvar_sFlagAll);
    cv.GetString(cv_sFlagAll, sizeof(cv_sFlagAll));
    
    LoadTranslations("AntiAfk.phrases");
    AutoExecConfig(true, "AntiAfk");
}

public void Cvar_iTime(ConVar cv, const char[] oldValue, const char[] newValue) { cv_iTime = cv.IntValue; }
public void Cvar_iLimit(ConVar cv, const char[] oldValue, const char[] newValue) { cv_iLimit = cv.IntValue; }
public void Cvar_iPunish(ConVar cv, const char[] oldValue, const char[] newValue) { cv_iPunish = cv.IntValue; }
public void Cvar_sFlagKill(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagKill, sizeof(cv_sFlagKill)); }
public void Cvar_sFlagChange(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagChange, sizeof(cv_sFlagChange)); }
public void Cvar_sFlagKick(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagKick, sizeof(cv_sFlagKick)); }
public void Cvar_sFlagAll(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagAll, sizeof(cv_sFlagAll)); }

public void OnClientPostAdminCheck(int iClient)
{
    if(!IsFakeClient(iClient) && CheckFlag(iClient, cv_sFlagAll))
    {
        g_iTime[iClient] = cv_iTime;
        g_hTimer[iClient] = CreateTimer(1.0, CheckAfk, GetClientUserId(iClient), TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
    }
}

public void PlayerSpawn(Event hEvent, const char[] sName, bool bDbc)
{
    int iClient = GetClientOfUserId(hEvent.GetInt("userid"));

    g_bAfk[iClient] = true;
    g_iTime[iClient] = cv_iTime;
}

public void CSWinPanelMatch(Event hEvent, const char[] sName, bool bDbc)
{
    for(int i = 1; i <= MaxClients; i++) g_bAfk[i] = false;
}

public Action CheckAfk(Handle timer, any UserId)
{
    int iClient = GetClientOfUserId(UserId);
    
    if(iClient && IsPlayerAlive(iClient) && !IsFakeClient(iClient) && g_bAfk[iClient])
    {
        if(--g_iTime[iClient] > 0)
        {
            if(g_iTime[iClient] > 10.0) return Plugin_Handled;
            else
            {
                SetGlobalTransTarget(iClient);
                FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Warning motion hud", g_iTime[iClient]);
                SetHudTextParams(0.005, 0.5, 1.0, 255, 68, 68, 255, 0, 1.0, 0.1, 0.1);
                ShowHudText(iClient, -1, g_sTranslite);
            }
            
            return Plugin_Continue;
        }
        
        g_iLimit[iClient]++;
        
        FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Warning motion chat", g_iLimit[iClient], cv_iLimit);
        CGOPrintToChat(iClient, g_sTranslite);
        
        if(CheckFlag(iClient, cv_sFlagKill))
        {
            ForcePlayerSuicide(iClient);
        
            FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Kill player", iClient);
            CGOPrintToChatAll(g_sTranslite);
        }
        
        if(g_iLimit[iClient] >= cv_iLimit)
        {
            switch(cv_iPunish)
            {
                case 0:
                {
                    if(CheckFlag(iClient,cv_sFlagKick))
                    {
                        FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Kick message");
                        KickClient(iClient, g_sTranslite);
                    }
                }
                case 1:
                {
                    g_iLimit[iClient] = 0;
                    
                    if(CheckFlag(iClient, cv_sFlagChange))
                    {
                        ChangeClientTeam(iClient, 1);
                    
                        FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Change team");
                        CGOPrintToChat(iClient, g_sTranslite);
                    }
                }
            }
        }
    }
    
    g_bAfk[iClient] = true;
    g_iTime[iClient] = cv_iTime;
    
    return Plugin_Handled;
}

public Action OnPlayerRunCmd(int iClient, int &iButtons, int &iImpulse, float fVel[3], float fAngles[3], int &iWeapon)
{
    if(g_bAfk[iClient] && IsPlayerAlive(iClient) && !IsFakeClient(iClient))
    {
        if(iButtons && !(iButtons & IN_LEFT || iButtons & IN_RIGHT || iButtons & IN_DUCK || iButtons & IN_JUMP))
        {
            g_bAfk[iClient] = false;
            g_iLimit[iClient] = 0;
        }
    }
}

public void OnClientDisconnect(int iClient)
{
    if(g_hTimer[iClient] != null)
    {
        delete g_hTimer[iClient];
        g_hTimer[iClient] = null;
    }
    
    g_iLimit[iClient] = 0;
}

bool CheckFlag(int iClient, char[] sFlag)
{
    int iFlagBits = GetUserFlagBits(iClient);
    if(iFlagBits & ReadFlagString("z") || iFlagBits & ReadFlagString(sFlag)) return false;
    return true;
}
 

Stepan1

Участник
Сообщения
84
Реакции
2
Вот далее в трансиле укажешь {GREEN},{DEFAULT} ну и как тебе нравится.
чтобы скомпилировать скинь в include csgo_colors
PHP:
#include <sdktools_functions>
#include <csgo_colors>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo = {name = "AntiAfk", author = "Drumanid", version = "2.2", url = "http://vk.com/drumanid"}

Handle g_hTimer[MAXPLAYERS +1];
bool g_bAfk[MAXPLAYERS +1];
int g_iTime[MAXPLAYERS +1], g_iLimit[MAXPLAYERS +1];
int cv_iTime, cv_iLimit, cv_iPunish;
char g_sTranslite[192], cv_sFlagKill[4], cv_sFlagChange[4], cv_sFlagKick[4], cv_sFlagAll[4];

public void OnPluginStart()
{
    HookEvent("player_spawn", PlayerSpawn);
    HookEvent("cs_win_panel_match", CSWinPanelMatch, EventHookMode_PostNoCopy);

    ConVar cv;
    (cv = CreateConVar("AA_TIME", "30", "RU: Время перед наказанием | EN: Time of punishment", _, true, 10.0, true, 120.0)).AddChangeHook(Cvar_iTime);
    cv_iTime = cv.IntValue;
    (cv = CreateConVar("AA_LIMIT", "3", "RU: Предупреждения | EN: Warning", _, true, 2.0, true, 6.0)).AddChangeHook(Cvar_iLimit);
    cv_iLimit = cv.IntValue;
    (cv = CreateConVar("AA_PUNISH", "1", "RU: 0 - Кикать / 1 - Перевести в наблюдатели | EN: 0 - Kicked / 1 - Change team 1(spec)", _, true, 0.0, true, 1.0)).AddChangeHook(Cvar_iPunish);
    cv_iPunish = cv.IntValue;
    (cv = CreateConVar("AA_FLAGKILL", "o", "RU: Флаг - иммунитет от убийства | EN: Flag - immunity from murder")).AddChangeHook(Cvar_sFlagKill);
    cv.GetString(cv_sFlagKill, sizeof(cv_sFlagKill));
    (cv = CreateConVar("AA_FLAGCHANGE", "p", "RU: Флаг - иммунитет от изменения команды | EN: Flag - immunity from team change")).AddChangeHook(Cvar_sFlagChange);
    cv.GetString(cv_sFlagChange, sizeof(cv_sFlagChange));
    (cv = CreateConVar("AA_FLAGKICK", "q", "RU: Флаг - иммунитет от кика | EN: Flag - immunity from kick")).AddChangeHook(Cvar_sFlagKick);
    cv.GetString(cv_sFlagKick, sizeof(cv_sFlagKick));
    (cv = CreateConVar("AA_FLAGALL", "z", "RU: Флаг - иммунитет от всего | EN: Flag - immunity from everything")).AddChangeHook(Cvar_sFlagAll);
    cv.GetString(cv_sFlagAll, sizeof(cv_sFlagAll));
   
    LoadTranslations("AntiAfk.phrases");
    AutoExecConfig(true, "AntiAfk");
}

public void Cvar_iTime(ConVar cv, const char[] oldValue, const char[] newValue) { cv_iTime = cv.IntValue; }
public void Cvar_iLimit(ConVar cv, const char[] oldValue, const char[] newValue) { cv_iLimit = cv.IntValue; }
public void Cvar_iPunish(ConVar cv, const char[] oldValue, const char[] newValue) { cv_iPunish = cv.IntValue; }
public void Cvar_sFlagKill(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagKill, sizeof(cv_sFlagKill)); }
public void Cvar_sFlagChange(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagChange, sizeof(cv_sFlagChange)); }
public void Cvar_sFlagKick(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagKick, sizeof(cv_sFlagKick)); }
public void Cvar_sFlagAll(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagAll, sizeof(cv_sFlagAll)); }

public void OnClientPostAdminCheck(int iClient)
{
    if(!IsFakeClient(iClient) && CheckFlag(iClient, cv_sFlagAll))
    {
        g_iTime[iClient] = cv_iTime;
        g_hTimer[iClient] = CreateTimer(1.0, CheckAfk, GetClientUserId(iClient), TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
    }
}

public void PlayerSpawn(Event hEvent, const char[] sName, bool bDbc)
{
    int iClient = GetClientOfUserId(hEvent.GetInt("userid"));

    g_bAfk[iClient] = true;
    g_iTime[iClient] = cv_iTime;
}

public void CSWinPanelMatch(Event hEvent, const char[] sName, bool bDbc)
{
    for(int i = 1; i <= MaxClients; i++) g_bAfk[i] = false;
}

public Action CheckAfk(Handle timer, any UserId)
{
    int iClient = GetClientOfUserId(UserId);
   
    if(iClient && IsPlayerAlive(iClient) && !IsFakeClient(iClient) && g_bAfk[iClient])
    {
        if(--g_iTime[iClient] > 0)
        {
            if(g_iTime[iClient] > 10.0) return Plugin_Handled;
            else
            {
                SetGlobalTransTarget(iClient);
                FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Warning motion hud", g_iTime[iClient]);
                SetHudTextParams(0.005, 0.5, 1.0, 255, 68, 68, 255, 0, 1.0, 0.1, 0.1);
                ShowHudText(iClient, -1, g_sTranslite);
            }
           
            return Plugin_Continue;
        }
       
        g_iLimit[iClient]++;
       
        FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Warning motion chat", g_iLimit[iClient], cv_iLimit);
        CGOPrintToChat(iClient, g_sTranslite);
       
        if(CheckFlag(iClient, cv_sFlagKill))
        {
            ForcePlayerSuicide(iClient);
       
            FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Kill player", iClient);
            CGOPrintToChatAll(g_sTranslite);
        }
       
        if(g_iLimit[iClient] >= cv_iLimit)
        {
            switch(cv_iPunish)
            {
                case 0:
                {
                    if(CheckFlag(iClient,cv_sFlagKick))
                    {
                        FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Kick message");
                        KickClient(iClient, g_sTranslite);
                    }
                }
                case 1:
                {
                    g_iLimit[iClient] = 0;
                   
                    if(CheckFlag(iClient, cv_sFlagChange))
                    {
                        ChangeClientTeam(iClient, 1);
                   
                        FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Change team");
                        CGOPrintToChat(iClient, g_sTranslite);
                    }
                }
            }
        }
    }
   
    g_bAfk[iClient] = true;
    g_iTime[iClient] = cv_iTime;
   
    return Plugin_Handled;
}

public Action OnPlayerRunCmd(int iClient, int &iButtons, int &iImpulse, float fVel[3], float fAngles[3], int &iWeapon)
{
    if(g_bAfk[iClient] && IsPlayerAlive(iClient) && !IsFakeClient(iClient))
    {
        if(iButtons && !(iButtons & IN_LEFT || iButtons & IN_RIGHT || iButtons & IN_DUCK || iButtons & IN_JUMP))
        {
            g_bAfk[iClient] = false;
            g_iLimit[iClient] = 0;
        }
    }
}

public void OnClientDisconnect(int iClient)
{
    if(g_hTimer[iClient] != null)
    {
        delete g_hTimer[iClient];
        g_hTimer[iClient] = null;
    }
   
    g_iLimit[iClient] = 0;
}

bool CheckFlag(int iClient, char[] sFlag)
{
    int iFlagBits = GetUserFlagBits(iClient);
    if(iFlagBits & ReadFlagString("z") || iFlagBits & ReadFlagString(sFlag)) return false;
    return true;
}
От души
 

Stepan1

Участник
Сообщения
84
Реакции
2
Вот далее в трансиле укажешь {GREEN},{DEFAULT} ну и как тебе нравится.
чтобы скомпилировать скинь в include csgo_colors
PHP:
#include <sdktools_functions>
#include <csgo_colors>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo = {name = "AntiAfk", author = "Drumanid", version = "2.2", url = "http://vk.com/drumanid"}

Handle g_hTimer[MAXPLAYERS +1];
bool g_bAfk[MAXPLAYERS +1];
int g_iTime[MAXPLAYERS +1], g_iLimit[MAXPLAYERS +1];
int cv_iTime, cv_iLimit, cv_iPunish;
char g_sTranslite[192], cv_sFlagKill[4], cv_sFlagChange[4], cv_sFlagKick[4], cv_sFlagAll[4];

public void OnPluginStart()
{
    HookEvent("player_spawn", PlayerSpawn);
    HookEvent("cs_win_panel_match", CSWinPanelMatch, EventHookMode_PostNoCopy);

    ConVar cv;
    (cv = CreateConVar("AA_TIME", "30", "RU: Время перед наказанием | EN: Time of punishment", _, true, 10.0, true, 120.0)).AddChangeHook(Cvar_iTime);
    cv_iTime = cv.IntValue;
    (cv = CreateConVar("AA_LIMIT", "3", "RU: Предупреждения | EN: Warning", _, true, 2.0, true, 6.0)).AddChangeHook(Cvar_iLimit);
    cv_iLimit = cv.IntValue;
    (cv = CreateConVar("AA_PUNISH", "1", "RU: 0 - Кикать / 1 - Перевести в наблюдатели | EN: 0 - Kicked / 1 - Change team 1(spec)", _, true, 0.0, true, 1.0)).AddChangeHook(Cvar_iPunish);
    cv_iPunish = cv.IntValue;
    (cv = CreateConVar("AA_FLAGKILL", "o", "RU: Флаг - иммунитет от убийства | EN: Flag - immunity from murder")).AddChangeHook(Cvar_sFlagKill);
    cv.GetString(cv_sFlagKill, sizeof(cv_sFlagKill));
    (cv = CreateConVar("AA_FLAGCHANGE", "p", "RU: Флаг - иммунитет от изменения команды | EN: Flag - immunity from team change")).AddChangeHook(Cvar_sFlagChange);
    cv.GetString(cv_sFlagChange, sizeof(cv_sFlagChange));
    (cv = CreateConVar("AA_FLAGKICK", "q", "RU: Флаг - иммунитет от кика | EN: Flag - immunity from kick")).AddChangeHook(Cvar_sFlagKick);
    cv.GetString(cv_sFlagKick, sizeof(cv_sFlagKick));
    (cv = CreateConVar("AA_FLAGALL", "z", "RU: Флаг - иммунитет от всего | EN: Flag - immunity from everything")).AddChangeHook(Cvar_sFlagAll);
    cv.GetString(cv_sFlagAll, sizeof(cv_sFlagAll));
   
    LoadTranslations("AntiAfk.phrases");
    AutoExecConfig(true, "AntiAfk");
}

public void Cvar_iTime(ConVar cv, const char[] oldValue, const char[] newValue) { cv_iTime = cv.IntValue; }
public void Cvar_iLimit(ConVar cv, const char[] oldValue, const char[] newValue) { cv_iLimit = cv.IntValue; }
public void Cvar_iPunish(ConVar cv, const char[] oldValue, const char[] newValue) { cv_iPunish = cv.IntValue; }
public void Cvar_sFlagKill(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagKill, sizeof(cv_sFlagKill)); }
public void Cvar_sFlagChange(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagChange, sizeof(cv_sFlagChange)); }
public void Cvar_sFlagKick(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagKick, sizeof(cv_sFlagKick)); }
public void Cvar_sFlagAll(ConVar cv, const char[] oldValue, const char[] newValue) { cv.GetString(cv_sFlagAll, sizeof(cv_sFlagAll)); }

public void OnClientPostAdminCheck(int iClient)
{
    if(!IsFakeClient(iClient) && CheckFlag(iClient, cv_sFlagAll))
    {
        g_iTime[iClient] = cv_iTime;
        g_hTimer[iClient] = CreateTimer(1.0, CheckAfk, GetClientUserId(iClient), TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
    }
}

public void PlayerSpawn(Event hEvent, const char[] sName, bool bDbc)
{
    int iClient = GetClientOfUserId(hEvent.GetInt("userid"));

    g_bAfk[iClient] = true;
    g_iTime[iClient] = cv_iTime;
}

public void CSWinPanelMatch(Event hEvent, const char[] sName, bool bDbc)
{
    for(int i = 1; i <= MaxClients; i++) g_bAfk[i] = false;
}

public Action CheckAfk(Handle timer, any UserId)
{
    int iClient = GetClientOfUserId(UserId);
   
    if(iClient && IsPlayerAlive(iClient) && !IsFakeClient(iClient) && g_bAfk[iClient])
    {
        if(--g_iTime[iClient] > 0)
        {
            if(g_iTime[iClient] > 10.0) return Plugin_Handled;
            else
            {
                SetGlobalTransTarget(iClient);
                FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Warning motion hud", g_iTime[iClient]);
                SetHudTextParams(0.005, 0.5, 1.0, 255, 68, 68, 255, 0, 1.0, 0.1, 0.1);
                ShowHudText(iClient, -1, g_sTranslite);
            }
           
            return Plugin_Continue;
        }
       
        g_iLimit[iClient]++;
       
        FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Warning motion chat", g_iLimit[iClient], cv_iLimit);
        CGOPrintToChat(iClient, g_sTranslite);
       
        if(CheckFlag(iClient, cv_sFlagKill))
        {
            ForcePlayerSuicide(iClient);
       
            FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Kill player", iClient);
            CGOPrintToChatAll(g_sTranslite);
        }
       
        if(g_iLimit[iClient] >= cv_iLimit)
        {
            switch(cv_iPunish)
            {
                case 0:
                {
                    if(CheckFlag(iClient,cv_sFlagKick))
                    {
                        FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Kick message");
                        KickClient(iClient, g_sTranslite);
                    }
                }
                case 1:
                {
                    g_iLimit[iClient] = 0;
                   
                    if(CheckFlag(iClient, cv_sFlagChange))
                    {
                        ChangeClientTeam(iClient, 1);
                   
                        FormatEx(g_sTranslite, sizeof(g_sTranslite), "%t", "Change team");
                        CGOPrintToChat(iClient, g_sTranslite);
                    }
                }
            }
        }
    }
   
    g_bAfk[iClient] = true;
    g_iTime[iClient] = cv_iTime;
   
    return Plugin_Handled;
}

public Action OnPlayerRunCmd(int iClient, int &iButtons, int &iImpulse, float fVel[3], float fAngles[3], int &iWeapon)
{
    if(g_bAfk[iClient] && IsPlayerAlive(iClient) && !IsFakeClient(iClient))
    {
        if(iButtons && !(iButtons & IN_LEFT || iButtons & IN_RIGHT || iButtons & IN_DUCK || iButtons & IN_JUMP))
        {
            g_bAfk[iClient] = false;
            g_iLimit[iClient] = 0;
        }
    }
}

public void OnClientDisconnect(int iClient)
{
    if(g_hTimer[iClient] != null)
    {
        delete g_hTimer[iClient];
        g_hTimer[iClient] = null;
    }
   
    g_iLimit[iClient] = 0;
}

bool CheckFlag(int iClient, char[] sFlag)
{
    int iFlagBits = GetUserFlagBits(iClient);
    if(iFlagBits & ReadFlagString("z") || iFlagBits & ReadFlagString(sFlag)) return false;
    return true;
}
Можешь убрать еще имунитет типо что бы всех убивало да же админов )
 

panikajo

Участник
Сообщения
866
Реакции
231
Можешь убрать еще имунитет типо что бы всех убивало да же админов )
PHP:
    (cv = CreateConVar("AA_FLAGKILL", "o", "RU: Флаг - иммунитет от убийства | EN: Flag - immunity from murder")).AddChangeHook(Cvar_sFlagKill);
    cv.GetString(cv_sFlagKill, sizeof(cv_sFlagKill));
    (cv = CreateConVar("AA_FLAGCHANGE", "p", "RU: Флаг - иммунитет от изменения команды | EN: Flag - immunity from team change")).AddChangeHook(Cvar_sFlagChange);
    cv.GetString(cv_sFlagChange, sizeof(cv_sFlagChange));
    (cv = CreateConVar("AA_FLAGKICK", "q", "RU: Флаг - иммунитет от кика | EN: Flag - immunity from kick")).AddChangeHook(Cvar_sFlagKick);
    cv.GetString(cv_sFlagKick, sizeof(cv_sFlagKick));
    (cv = CreateConVar("AA_FLAGALL", "z", "RU: Флаг - иммунитет от всего | EN: Flag - immunity from everything")).AddChangeHook(Cvar_sFlagAll);

Просто оставьте поля пустыми ""
 
Сверху Снизу