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

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Mensi1337, ничего. У тебя пишет, что хука такого нет. Что ты хотел от этого старья v34? Там не меньше проблем с плагинами, чем в КСГО. Только у КСГО они потому, что вентили постоянно что-то обновляют и ломают этим плагины.
Попробуй обновить версию SM до более свежей. Насколько мне известно, то давно уже можно даже SM1.9 на v34 найти.

@Wightjeck, как-то так
 

Вложения

  • cleanwpn.sp
    1.9 КБ · Просмотры: 9
  • cleanwpn.smx
    5 КБ · Просмотры: 5
Последнее редактирование:

wightjeck

Костыли заказывали?
Сообщения
472
Реакции
154
@Mensi1337, ничего. У тебя пишет, что хука такого нет. Что ты хотел от этого старья v34? Там не меньше проблем с плагинами, чем в КСГО. Только у КСГО они потому, что вентили постоянно что-то обновляют и ломают этим плагины.
Попробуй обновить версию SM до более свежей. Насколько мне известно, то давно уже можно даже SM1.9 на v34 найти.

@Wightjeck, как-то так
Сейчас проверю
 

hostvd

Участник
Сообщения
21
Реакции
2
Всем доброго дня:)
как можно проверить квар у клиента. при условии что есть:

PHP:
new const String:CvarName[][] =
{
  "cl_minmodels",
  "cl_allowdownload",
  "cl_scalecrosshair"
};
new const Float:CvarPlugins[] =
{
  "1.2", // cl_minmodels
  "0.0", // cl_allowdownload
  "60.0" // cl_scalecrosshair
};

CheckClientVariable(client)
{
  for (new i = 0; i < sizeof(CvarName); i++)
  { 
    QueryClientConVar(client, CvarName[i], ConVarQueryFinished:ClientConVar, client);
  }
}

public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
{
    //тут уже можно посмотреть какая переменная кваров(написанных выше в CvarName) стоит у клиента.
    //
    //Как можно теперь квар клиента проверить с "CvarPlugins".
}

P.S. Еще предлагали сделать все через трехмерный массив, но похоже я не умею:) у меня не получилось.
 

wightjeck

Костыли заказывали?
Сообщения
472
Реакции
154
@Mensi1337, ничего. У тебя пишет, что хука такого нет. Что ты хотел от этого старья v34? Там не меньше проблем с плагинами, чем в КСГО. Только у КСГО они потому, что вентили постоянно что-то обновляют и ломают этим плагины.
Попробуй обновить версию SM до более свежей. Насколько мне известно, то давно уже можно даже SM1.9 на v34 найти.

@Wightjeck, как-то так
Работает! Большое спасибо. Хотел бы попросить. Можно сделать так чтобы гранаты запрещались при покупке и сообщение выводило только одно, даже если купишь много гранат? (одно общее сообщение)

PHP:
public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    if (!strcmp(weapon, "smokegrenate", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "flashbang", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "hegrenade", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "incgrenade", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "molotov", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "decoy", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
--- Добавлено позже ---
@Mensi1337, ничего. У тебя пишет, что хука такого нет. Что ты хотел от этого старья v34? Там не меньше проблем с плагинами, чем в КСГО. Только у КСГО они потому, что вентили постоянно что-то обновляют и ломают этим плагины.
Попробуй обновить версию SM до более свежей. Насколько мне известно, то давно уже можно даже SM1.9 на v34 найти.

@Wightjeck, как-то так
Блин игроки будут подбирать оружие которое будет лежать на земле, можно доб еще чистку оружия на земле? Или так чтобы они не смогли подобрать оружие
 
Последнее редактирование:

Mensi1337

Участник
Сообщения
242
Реакции
16
Работает! Большое спасибо. Хотел бы попросить. Можно сделать так чтобы гранаты запрещались при покупке и сообщение выводило только одно, даже если купишь много гранат? (одно общее сообщение)

PHP:
public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    if (!strcmp(weapon, "smokegrenate", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "flashbang", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "hegrenade", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "incgrenade", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "molotov", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    else if (!strcmp(weapon, "decoy", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
--- Добавлено позже ---

Блин игроки будут подбирать оружие которое будет лежать на земле, можно доб еще чистку оружия на земле? Или так чтобы они не смогли подобрать оружие
PHP:
public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    if (!strcmp(weapon, "smokegrenate", false) ||
        !strcmp(weapon, "flashbang", false) ||
        !strcmp(weapon, "hegrenade", false) ||
        !strcmp(weapon, "incgrenade", false) ||
        !strcmp(weapon, "molotov", false) ||
        !strcmp(weapon, "decoy", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Я думаю так можно сделать
 

Faya™

Жуестер
Сообщения
867
Реакции
457
PHP:
public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    if (!strcmp(weapon, "smokegrenate", false) ||
        !strcmp(weapon, "flashbang", false) ||
        !strcmp(weapon, "hegrenade", false) ||
        !strcmp(weapon, "incgrenade", false) ||
        !strcmp(weapon, "molotov", false) ||
        !strcmp(weapon, "decoy", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Я думаю так можно сделать
Тоже самое что и он кинул, выводить будет каждый раз при покупке гранаты, а ему надо 1 раз
 

wightjeck

Костыли заказывали?
Сообщения
472
Реакции
154
PHP:
public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    if (!strcmp(weapon, "smokegrenate", false) ||
        !strcmp(weapon, "flashbang", false) ||
        !strcmp(weapon, "hegrenade", false) ||
        !strcmp(weapon, "incgrenade", false) ||
        !strcmp(weapon, "molotov", false) ||
        !strcmp(weapon, "decoy", false))
    {
        PrintToChat(client, "Покупка гранат запрещена!");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Я думаю так можно сделать
Тоже самое что и он кинул, выводить будет каждый раз при покупке гранаты, а ему надо 1 раз
Ребят всем спасибо кто помогал! mp_buy_allow_grenades решает всю проблему)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@hostvd, разве что так:
PHP:
static const String:sCVar[][][] =
{
    {"cl_minmodels", "1.2"},
    {"cl_allowdownload", "0.0"},
    {"cl_scalecrosshair", "60.0"}
};

CheckClientVariable(client)
{
    if(!IsFakeClient(client)) for(new i, num = sizeof(sCVar); i < num; i++)
        QueryClientConVar(client, sCVar[i][0], ConVarQueryFinished:ClientConVar, i);
}

public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:i)
{
    PrintToServer("%N CVar: %s = %s (%s)", client, cvarName, cvarValue, sCVar[i][1]);
}
 

wightjeck

Костыли заказывали?
Сообщения
472
Реакции
154
@hostvd, разве что так:
PHP:
static const String:sCVar[][][] =
{
    {"cl_minmodels", "1.2"},
    {"cl_allowdownload", "0.0"},
    {"cl_scalecrosshair", "60.0"}
};

CheckClientVariable(client)
{
    if(!IsFakeClient(client)) for(new i, num = sizeof(sCVar); i < num; i++)
        QueryClientConVar(client, sCVar[i][0], ConVarQueryFinished:ClientConVar, i);
}

public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:i)
{
    PrintToServer("%N CVar: %s = %s (%s)", client, cvarName, cvarValue, sCVar[i][1]);
}
Не могли бы вы доб в тот плагин, чтобы нельзя было подбирать оружие в конце раунда?
 

Вложения

  • cleanwpn.sp
    1.9 КБ · Просмотры: 5

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980

Вложения

  • cleanwpn_1.1.2.smx
    5.4 КБ · Просмотры: 4
  • cleanwpn_1.1.2.sp
    2.5 КБ · Просмотры: 14

rokfestr

Участник
Сообщения
340
Реакции
63
Может кто-то добавить меню. Чтобы когда пишешь !knb то открывалось меню с выбором:
Сыграть в КНБ
Отключить приглашение в КНБ
Включить приглашение в КНБ
 

Вложения

  • store_creditsSSP.sp
    32.1 КБ · Просмотры: 7

hostvd

Участник
Сообщения
21
Реакции
2
static const String:sCVar[][][] =
{
{
"cl_minmodels", "1.2"},
{
"cl_allowdownload", "0.0"},
{
"cl_scalecrosshair", "60.0"}
};

CheckClientVariable(client)
{
if(!
IsFakeClient(client)) for(new i, num = sizeof(sCVar); i < num; i++)
QueryClientConVar(client, sCVar[i][0], ConVarQueryFinished:ClientConVar, i);
}

public
ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:i)
{
PrintToServer("%N CVar: %s = %s (%s)", client, cvarName, cvarValue, sCVar[i][1]);
}
а можно еще какой то таймер поставить, чтобы сюда подставлялись переменные с задержкой ну например в секунду 4 переменных с "sCVar".
PHP:
QueryClientConVar(client, sCVar[i][0], ConVarQueryFinished:ClientConVar, i);
 

hostvd

Участник
Сообщения
21
Реакции
2
не понял что ты хочешь получить
Просто сейчас сюда подставляется за одну секунду все квары с массива "sCVar". и это создает проблемы) нагрузку.
PHP:
QueryClientConVar(client, sCVar[i][0], ConVarQueryFinished:ClientConVar, i);
а хотелось бы чтобы квары с массива шли с секундной паузой - если это реально сделать:)

Пример:
PHP:
Сначала с массива "sCVar" подставляет 4 квара "cl_minmodels", "cl_allowdownload", "cl_scalecrosshair", "cl_crosshairsize" и через секунду следующий квары(тоже по 4), "cl_crosshairthickness", "cl_crosshairspreadscale", "Какой то квар", "Какой то квар" и т.д..

Ну, или хотябы по одному за 1 секнуду.
PHP:
"cl_minmodels" через секунду подставляется "cl_allowdownload" и так далее "cl_scalecrosshair"
 

hostvd

Участник
Сообщения
21
Реакции
2
@Grey83, Ошибка при компиляции.
1.png

PHP:
static const String:sCVar[][][] =
{
    {"cl_minmodels", "1.2"},
    {"cl_allowdownload", "0.0"},
    {"cl_scalecrosshair", "60.0"}
};

public OnPluginStart()
{
   HookEvent("player_spawn", Player_Spawn);
}

public Player_Spawn(Handle:event, const String:name[], bool:silent)
{
   new client = GetClientOfUserId(GetEventInt(event, "userid"));
   if (IsClientInGame(client) && IsPlayerAlive(client) && GetClientTeam(client) != 1)
   {
       CreateTimer(1.0, Timer_QueryCVar, sizeof(sCVar), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action Timer_QueryCVar(Handle:hTimer, num)
{
    static i;
    if(i < num) QueryClientConVar(client, sCVar[i][0], ConVarQueryFinished:ClientConVar, i++);
    else return Plugin_Stop;
    return Plugin_Continue;
}

public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:i)
{
    PrintToServer("%N CVar: %s = %s (%s)", client, cvarName, cvarValue, sCVar[i][1]);
}

2.png

PHP:
static const String:sCVar[][][] =
{
    {"cl_minmodels", "1.2"},
    {"cl_allowdownload", "0.0"},
    {"cl_scalecrosshair", "60.0"}
};

public OnPluginStart()
{
   HookEvent("player_spawn", Player_Spawn);
}

public Player_Spawn(Handle:event, const String:name[], bool:silent)
{
   new client = GetClientOfUserId(GetEventInt(event, "userid"));
   if (IsClientInGame(client) && IsPlayerAlive(client) && GetClientTeam(client) != 1)
   {
       CreateTimer(1.0, Timer_QueryCVar, sizeof(sCVar), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action Timer_QueryCVar(Handle:hTimer, any:client)
{
    static i;
    if(i < num) QueryClientConVar(client, sCVar[i][0], ConVarQueryFinished:ClientConVar, i++);
    else return Plugin_Stop;
    return Plugin_Continue;
}

public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:i)
{
    PrintToServer("%N CVar: %s = %s (%s)", client, cvarName, cvarValue, sCVar[i][1]);
}
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@hostvd, вот так надо было
PHP:
static const String:sCVar[][][] =
{
    {"cl_minmodels", "1.2"},
    {"cl_allowdownload", "0.0"},
    {"cl_scalecrosshair", "60.0"}
};

CheckClientVariable(client)
{
    if(!IsFakeClient(client)) CreateTimer(1.0, Timer_QueryCVar, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action:Timer_QueryCVar(Handle:hTimer, client)
{
    static i;
    if(i < sizeof(sCVar)) QueryClientConVar(client, sCVar[i][0], ConVarQueryFinished:ClientConVar, i++);
    else return Plugin_Stop;
    return Plugin_Continue;
}

public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:i)
{
    PrintToServer("%N CVar: %s = %s (%s)", client, cvarName, cvarValue, sCVar[i][1]);
}
 

hostvd

Участник
Сообщения
21
Реакции
2
@Grey83, сейчас все работает:) Но когда он проходить весь массив, выходит "вот это":
1.png
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@hostvd, попробуй так:
PHP:
static const String:sCVar[][][] =
{
    {"cl_minmodels", "1.2"},
    {"cl_allowdownload", "0.0"},
    {"cl_scalecrosshair", "60.0"}
};

CheckClientVariable(client)
{
    if(!IsFakeClient(client)) CreateTimer(1.0, Timer_QueryCVar, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action:Timer_QueryCVar(Handle:hTimer, client)
{
    static i;
    if(i < sizeof(sCVar))
    {
        QueryClientConVar(client, sCVar[i][0], ConVarQueryFinished:ClientConVar, i);
        i++;
    }
    else return Plugin_Stop;
    return Plugin_Continue;
}

public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:i)
{
    PrintToServer("%N CVar: %s = %s (%s)", client, cvarName, cvarValue, sCVar[i][1]);
}
 
Сверху Снизу