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

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
@₮αй₮оβый,
C-подобный:
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

public void OnEntityCreated(int ent, const char[] cls)
{
    static char buffer[32];
    if(StrEqual(cls, "func_button") && GetEntPropString(ent, Prop_Data, "m_iName", buffer, sizeof(buffer))
    && StrEqual(buffer, "Button_Crazy5b")) AcceptEntityInput(ent, "Lock");
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@₮αй₮оβый, поправил код и добавил исходник со скомпилированными плагинами для SM1.8 и SM1.10
 

acrobite

Участник
Сообщения
182
Реакции
33
Прошу помочь подредактировать плагин. Делов на пару мин.
Нужно убрать проверку на freeze(заморозку). Из-за квара mp_freezetime 1< плагин багается и некоторые предметы пропадают. Разраб плагина не хочет фиксить баг) При кваре mp_freezetime 0 предметы не багаются. Но мне нужна замарозка в начале раунда.
Заранее благодарен.
 

Вложения

  • BlockingZones.sp
    29.3 КБ · Просмотры: 9

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@acrobite, что-то посмотрел код и не увидел ничего такого, из-за чего мог бы быть такой баг.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@acrobite, ты про это?
Добавил 17 сеток. Каждый раунд одна из 17 сеток пропадает, может 1, 7 или 10(рандомно). csgo
эта проблема возникает при 15 и более игроках.
UsePlayersBZ "0"

Попробуй эту версию (при создании пропов через конфиг в консоли сервера будет писаться "Items created: %число%"):
 

Вложения

  • BlockingZones 1.3_debug.sp
    27 КБ · Просмотры: 5

acrobite

Участник
Сообщения
182
Реакции
33
@acrobite, ты про это?

Попробуй эту версию (при создании пропов через конфиг в консоли сервера будет писаться "Items created: %число%"):
Не работает. Items created: 0
Хотя есть в файле уже созданные и сохраненные предметы. + не создается предмет через админку.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@acrobite, в строке 753 замени if(iEntity != -1) return false; на if(iEntity == -1) return false;
Потому и 0.

Перезалил файл с исправлением.
 

acrobite

Участник
Сообщения
182
Реакции
33
@acrobite, в строке 753 замени if(iEntity != -1) return false; на if(iEntity == -1) return false;
Потому и 0.

Перезалил файл с исправлением.
И что должно измениться? В консольке пишет Items created: 15 , да, всего их 15. Но заспавлено 14 из 15, 1 рандомная сетка пропадает.
 

acrobite

Участник
Сообщения
182
Реакции
33
Может просто с квотой проблема?
Подсчет игроков выключен.
--- Добавлено позже ---
HookEvent("round_freeze_end", RoundFreezeEnd, EventHookMode_PostNoCopy);
заменил на
HookEvent("round_start", RoundStart, EventHookMode_PostNoCopy);

И все пашет, я не знаю, насколько это правильно, но теперь работает без багов. Жалко, что поздно додумался это сделать.
 

Вложения

  • BlockingZones 1.3.sp
    26.9 КБ · Просмотры: 5
Последнее редактирование:

Mr.Black

Участник
Сообщения
145
Реакции
61
Доброго времени суток!
Помогите, пожалуйста, пофиксить плагин. Выдёт в error_log такие строчки
L 04/07/2019 - 18:26:12: [SM] Exception reported: Client index 281 is invalid
L 04/07/2019 - 18:26:12: [SM] Blaming: noffknife.smx
L 04/07/2019 - 18:26:12: [SM] Call stack trace:
L 04/07/2019 - 18:26:12: [SM] [0] GetClientTeam
L 04/07/2019 - 18:26:12: [SM] [1] Line 21, C:\Users\Admin\Desktop\sourcemod\scripting\noffknife.sp::TraceAttack
L 04/07/2019 - 18:26:12: [SM] Exception reported: Client index 281 is invalid
L 04/07/2019 - 18:26:12: [SM] Blaming: noffknife.smx
L 04/07/2019 - 18:26:12: [SM] Call stack trace:
L 04/07/2019 - 18:26:12: [SM] [0] GetClientTeam
L 04/07/2019 - 18:26:12: [SM] [1] Line 21, C:\Users\Admin\Desktop\sourcemod\scripting\noffknife.sp::TraceAttack
L 04/07/2019 - 18:26:12: [SM] Exception reported: Client index 281 is invalid
L 04/07/2019 - 18:26:12: [SM] Blaming: noffknife.smx
L 04/07/2019 - 18:26:12: [SM] Call stack trace:
L 04/07/2019 - 18:26:12: [SM] [0] GetClientTeam
L 04/07/2019 - 18:26:12: [SM] [1] Line 21, C:\Users\Admin\Desktop\sourcemod\scripting\noffknife.sp::TraceAttack
При этом сам плагин работает отлично! Но хотелось бы, чтобы не ср*л в лог.
C-подобный:
public void OnClientPutInServer(int iClient)
{
    SDKHook(iClient, SDKHook_TraceAttack, TraceAttack);
}

public Action TraceAttack(int iVictim, int &iAttacker, int &iInflictor, float &damage, int &damagetype, int &ammotype, int hitbox, int hitgroup)
{
    return (iAttacker > 0 && GetClientTeam(iVictim) == GetClientTeam(iAttacker) && damagetype != DMG_BLAST) ? Plugin_Stop:Plugin_Continue;
}
 

kleuser

Участник
Сообщения
1,838
Реакции
732
Помогите пожалуйста. Отыскал некий плагин для блокировки +left +right и немного его подредачил чтобы убивало.
Так вот, помогите сделать проверку чтобы убивало только КТ, а Т не убивало.

PHP:
#include <sourcemod>
#include <profiler>
#include <sdktools>
#include <csgo_colors>

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon)
{
    if ((buttons & IN_LEFT) || (buttons & IN_RIGHT))
    {
        if(IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client))
        {
            ForcePlayerSuicide(client);
            CGOPrintToChat(client, "{GRAY}[{LIGHTBLUE}CONSOLE{GRAY}]{LIGHTRED} Запрещено использовать {RED}+left +right. {LIGHTRED}Играйте честно!");
        }
    }
    return Plugin_Continue;
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@kleuser,
PHP:
#include <sourcemod>
#include <sdktools>
#include <csgo_colors>

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon)
{
    if ((buttons & IN_LEFT) || (buttons & IN_RIGHT))
    {
        if(IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client) && GetClientTeam(client) == 3)
        {
            ForcePlayerSuicide(client);
            CGOPrintToChat(client, "{GRAY}[{LIGHTBLUE}CONSOLE{GRAY}]{LIGHTRED} Запрещено использовать {RED}+left +right. {LIGHTRED}Играйте честно!");
        }
    }
    return Plugin_Continue;
}

Оффтоп
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@Mr.Black, пробуй
PHP:
public void OnClientPostAdminCheck(int iClient)
{
    SDKHook(iClient, SDKHook_TraceAttack, TraceAttack);
}

public Action TraceAttack(int iVictim, int &iAttacker, int &iInflictor, float &damage, int &damagetype, int &ammotype, int hitbox, int hitgroup)
{
    return iAttacker > 0 && iAttacker <= MaxClients && damagetype != DMG_BLAST && GetClientTeam(iVictim) == GetClientTeam(iAttacker) ? Plugin_Handled : Plugin_Continue;
}
--- Добавлено позже ---
@Крузяра, тогда уж лучше так:
PHP:
#include <sdktools_hooks>
#include <sdktools_functions>
#include <csgo_colors>

public void OnPlayerRunCmdPost(int client, int buttons)
{
    if(buttons & (IN_LEFT|IN_RIGHT) && !IsFakeClient(client) && IsPlayerAlive(client) && GetClientTeam(client) == 3)
    {
        ForcePlayerSuicide(client);
        CGOPrintToChat(client, "{GRAY}[{LIGHTBLUE}CONSOLE{GRAY}]{LIGHTRED} Запрещено использовать {RED}+left +right{LIGHTRED}. Играйте честно!");
    }
}
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Grey83, я тогда же исправил (см. оригинальный пост, на который я сослался), но у того человека, который тестил, всё равно не работало. Мы уже тогда в ЛС общались.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
Вообще основные изменения в том, что убрана проверка на нахождение игрока в игре (как можно отловить нажатия игрока, который ещё не подключился? :biggrin: ), все проверки в одну строку сделал и сделал обработку в void OnPlayerRunCmdPost (т.к. кнопки не блокируются, то и возвращать ничего не нужно).
Ну и уменьшил количество инклюдов (так скомпиленный плагин меньше получится)
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
как можно отловить нажатия игрока, который ещё не подключился? :biggrin:
Пффф, запросто. Клиент шлёт иногда пинги во время коннекта (например, когда файлы загружает, чтобы сервер не отключал его), от которых срабатывает OnPlayerRunCmd()...

Ну и уменьшил количество инклюдов (так скомпиленный плагин меньше получится)
Размер всё равно никак не влияет на работоспособность.
 
Сверху Снизу