akvorok.ego

Участник
Сообщения
314
Реакции
186
  • Автор ресурса
  • #1
Пользователь san911 разместил новый ресурс:

Player Weapon Blocker - Плагин позволяет заблокировать игроку доступ к оружию (На время или навсегда).

Автор: KOROVKA

2bc20f9bc9230dcbd26424bc248b88ee.png
031e3243d3fca88e9427c65c14c9b8ac.png


Плагин добавляет пункты управления блокировкой оружия игроков в админ меню (В категорию Управление игроками). Плагин позволяет выдать блокировку на время или навсегда, а также снять в случае необходимости.

C-подобный:
(Версия: 1.0.0) -...

Узнать больше об этом ресурсе...
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
PHP:
new String:TimeNames
>>
PHP:
static String:TimeNames
--- Добавлено позже ---
PHP:
    decl String:Title[80];
    Format(Title, 80, "%s оружие игроку:", status ? "Заблокировать":"Разблокировать");
>>
PHP:
    decl String:Title[80];
    FormatEx(Title, 80, "%s оружие игроку:", status ? "Заблокировать":"Разблокировать");
--- Добавлено позже ---
PHP:
                    new time = g_cTime[client] - getTime;
                    new days = time/3600/24;
                    new hours = time/3600%24;
                    new mins = time/60%60;
                    new secs = time%60;
                    PrintToChat(client, "\x07FFFFFF[Player Weapon Blocker] \x07FFF700До разблокировки доступа к оружию осталось: \x0700BFFF%s%s%s%s", NumToName(days, 0), NumToName(hours, 1), NumToName(mins, 2), NumToName(secs, 3));
>>
PHP:
                    new time = g_cTime[client] - getTime;
                    PrintToChat(client, "\x07FFFFFF[Player Weapon Blocker] \x07FFF700До разблокировки доступа к оружию осталось: \x0700BFFF%s%s%s%s", NumToName(time/3600/24, 0), NumToName(time/3600%24, 1), NumToName(time/60%60, 2), NumToName(time%60, 3));
--- Добавлено позже ---
ну, и в некоторых местах размерности массивов нужно было бы подкоректировать
 
Последнее редактирование:

akvorok.ego

Участник
Сообщения
314
Реакции
186
  • Автор ресурса
  • #4
PHP:
new String:TimeNames
>>
PHP:
static String:TimeNames
Так что ли?
PHP:
String:NumToName(num, type)
{
    static String:TimeNames[][][] = { {"день", "дня", "дней"}, {"час", "часа", "часов"}, {"минута", "минуты", "минут"}, {"секунда", "секунды", "секунд"} };
   
    decl String:buffer[156];
    //buffer[0] = '\0';
    switch(num)
    {
        case 0:        {}
        case 1:        FormatEx(buffer, 156, "%s 1 %s", buffer, TimeNames[type][0]);
        case 2,3,4:    FormatEx(buffer, 156, "%s %i %s", buffer, num, TimeNames[type][1]);
        default:
        {
            if(num < 21) FormatEx(buffer, 156, "%s %i %s", buffer, num, TimeNames[type][2]);
            else
            {
                switch(num % 10)
                {
                    case 1:        FormatEx(buffer, 156, "%s %i %s", buffer, num, TimeNames[type][0]);
                    case 2,3,4:    FormatEx(buffer, 156, "%s %i %s", buffer, num, TimeNames[type][1]);
                    default:        FormatEx(buffer, 156, "%s %i %s", buffer, num, TimeNames[type][2]);
                }
            }
        }
    }
    return buffer;
}
На CS:GO будет работать?
Да
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@san911, не комментируй buffer[0] = '\0'; как в последнем примере, тебе же не нужны проблемы с выводом?
--- Добавлено позже ---
Можно "\x07FFFFFF[Player Weapon Blocker] \x07FFF700" сделать текстовой переменной, а во всех сообщениях просто её подставлять (чтобы можно было правкой в одном месте плагина исправить все сообщения сразу).
PHP:
static String:sPrefix[] = "\x07FFFFFF[Player Weapon Blocker] \x07FFF700";
А потом вместо
PHP:
PrintToChat(param1, " \x07FFFFFF[Player Weapon Blocker] \x07FFF700Игрок вышел!");
просто
PHP:
PrintToChat(param1, " %sИгрок вышел!", sPrefix);
Так же и с цветами можно поступить.
--- Добавлено позже ---
Да и менюшку можно немного упростить: одна кнопка с именем будет переключать режимы. Но мне лень возиться с этим кодом. Там нужно при создании меню добавить флаг MENU_ACTIONS_ALL, а в каллбэке добавить кейс MenuAction_DisplayItem, в котором (через перевод строки или справа от ника) можно будет указывать текущий статус.
Если игроку ещё оружие не заблокировано, то будет предлагать варианты блокировки, а если уже оно заблокировано, то сразу после выбора разблокируется.
В общем есть способы улучшить.
Главное чтобы в CSGO не было той же проблемы с динамическим меню, что и у L4D2.

UPD или у тебя отдельные списки генерируются? Один для тех, кто может пользоваться, а другой для тех, кто не может?
 
Последнее редактирование:

Danyas

Участник
Сообщения
2,173
Реакции
1,072

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Ещё совет: в блоке MenuHandler_CommandsList (110-я строка) в кейсе MenuAction_Select весь код можно свести к
PHP:
DisplayPlayerWeaponBlockerMenu(param1, (param2 == 0));
--- Добавлено позже ---
@Danyas, точно. Читал недавно, но запамятовал.
Уже поправил в том комменте.
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
он там не нужен. Он нужен только здесь:
PHP:
case 0: {}
ну да, ну да
Внимательно смотрим на первый параметр FormatEx во всех кейсах:
PHP:
..."%s 1 %s", buffer, ...
Правда не знаю для чего он там вообще нужен. Т.к. там всегда будет пустая строка.
--- Добавлено позже ---
и чуть не забыл: прекрати создавать отдельную строковую переменную для названия меню.
SetMenuTitle и так прекрасно поддерживает форматирование:
PHP:
SetMenuTitle(menu, "Выдать блокировку оружия:\n%N", target);
 
Последнее редактирование:

akvorok.ego

Участник
Сообщения
314
Реакции
186
  • Автор ресурса
  • #10
@san911, Можно "\x07FFFFFF[Player Weapon Blocker] \x07FFF700" сделать текстовой переменной, а во всех сообщениях просто её подставлять (чтобы можно было правкой в одном месте плагина исправить все сообщения сразу).
PHP:
static String:sPrefix[] = "\x07FFFFFF[Player Weapon Blocker] \x07FFF700";
А потом вместо
PHP:
PrintToChat(param1, " \x07FFFFFF[Player Weapon Blocker] \x07FFF700Игрок вышел!");
просто
PHP:
PrintToChat(param1, " %sИгрок вышел!", sPrefix);
Так же и с цветами можно поступить.
Думаю это лишнее.

UPD или у тебя отдельные списки генерируются? Один для тех, кто может пользоваться, а другой для тех, кто не может?
В списках нет ботов и есть подключающиеся игроки (А так просто все игроки отображаються). COMMAND_FILTER_NO_BOTS|COMMAND_FILTER_CONNECTED

Ещё совет: в блоке MenuHandler_CommandsList (110-я строка) в кейсе MenuAction_Select весь код можно свести к
PHP:
DisplayPlayerWeaponBlockerMenu(param1, (param2 == 0));
Как это работать должно что-то не пойму?

и чуть не забыл: прекрати создавать отдельную строковую переменную для названия меню.
SetMenuTitle и так прекрасно поддерживает форматирование:
PHP:
SetMenuTitle(menu, "Выдать блокировку оружия:\n%N", target);
Спасибо, не знал...
 
Последнее редактирование:

akvorok.ego

Участник
Сообщения
314
Реакции
186
  • Автор ресурса
  • #11
Пользователь san911 обновил ресурс Player Weapon Blocker новой записью:

Оптимизация и улучшения плагина Player Weapon Blocker.

C-подобный:
(Версия: 1.0.0) - Релиз.
(Версия: 1.1.0) - Оптимизация кода.
- Добавлен вывод сообщения администрации о блокировке оружия игроку.
- Добавлена версия с цветами для cs:go.
- И прочие улучшения.

Узнать больше об этом обновлении...
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Добавлена версия с цветами для cs:go.
Вообще-то это можно было сделать 1 плагином :cool:
Достаточно при загрузке проверять движок, а потом подставлять нужные цвета.
И поэтому, то что ты посчитал лишним было бы совсем не лишним.
Как это работать должно что-то не пойму?
Ну у тебя 2 раза одно и то же, только в конце параметр true или false, а у меня это же делается в одну строку
DisplayPlayerWeaponBlockerMenu(param1, (param2 == 0));
Если param2 равен нулю, то там будет true, в остальных случаях этот параметр будет равняться false.

И да, объясни в конце концов какой смысл в функции NumToName в кейсах, выполняя FormatEx, в начале перед цифрами ставить текст, содержащийся в переменной buffer?
PHP:
FormatEx(buffer, 156, "%s %i %s", buffer, num, TimeNames[type][1]);
Ведь у тебя эта переменная в тот момент всегда имеет значение пустой строки
PHP:
 buffer[0] = '\0';
И, соответственно твоя запись равнозначна следующей:
PHP:
FormatEx(buffer, 156, " %i %s", num, TimeNames[type][1]);
А ты пишешь о какой-то оптимизации.
--- Добавлено позже ---
И цвета можно было сделать так:
PHP:
...
static String:white[8];
static String:yellow[8];
static String:red[8];
static String:cyan[8];
...
public OnPluginStart()
{
...
    if(GuessSDKVersion() == SOURCE_SDK_CSGO)      // или if(GetEngineVersion() == Engine_CSGO)
    {
        white = "4";
        yellow = "1";
        red = "2";
        cyan = "6";
    }
    else
    {
        white = "7FFFFFF";
        yellow = "7FFF700";
        red = "7FF0000";
        cyan = "700BFFF";
    }
...
}
...
public MenuHandler_TimeList(Handle:menu, MenuAction:action, param1, param2)
{
...
                    if(time > 0) PrintToChat(param1, " \x0%s[Player Weapon Blocker] \x0%sДоступ к оружию игроку \x0%s%N \x0%sбыл успешно заблокирован! \x0%s(На %d минут)", white, yellow, red, target, yellow, cyan, time);
...
}
...
Так нет надобности в 2 плагинах только из-за одних цветов текста.
Если ты, конечно не хочешь юзать инклюды вроде Multi Colors
 
Последнее редактирование:

akvorok.ego

Участник
Сообщения
314
Реакции
186
  • Автор ресурса
  • #13
Пользователь san911 обновил ресурс Player Weapon Blocker новой записью:

Добавление нативов и прочие улучшения.

C-подобный:
(Версия: 1.0.0) - Релиз.
(Версия: 1.1.0) - Оптимизация кода.
- Добавлен вывод сообщения администрации о блокировке оружия игроку.
- Добавлена версия с цветами для cs:go.
- И прочие улучшения.
(Версия: 1.2.0) - Добавлены нативы IsClientInWeaponBlock, GetClientTimeWeaponBlock, SetClientTimeWeaponBlock
- Добавлена авто подмена цветов для всех игр.
- И прочие улучшения.

Узнать больше об этом обновлении...
 

akvorok.ego

Участник
Сообщения
314
Реакции
186
  • Автор ресурса
  • #14
Пользователь san911 обновил ресурс Player Weapon Blocker новой записью:

Добавлена возможность блокировать оружие выборочно. И другое...

Версия: 2.0.0

(Версия: 2.0.0) - Добавлена возможность блокировать оружие выборочно.
- Добавлен конфиг файл.
- Добавлен натив GetClientBlockTimeWeapon
- Добавлен новый пункт меню "Управление игроками с блокировкой".
1. Позволяет редактировать и просматривать блокировки игроков которые не на сервере.
2. Позволяет просматривать информацию о блокировке. (Когда был выдан блок, когда будет снят, SteamID64 игрока, и список заблокированного оружия).
3. Позволяет редактировать блокированное оружие.
4. Позволяет менять время блокировки.
5. Позволяет снимать блокировку.
- Добавлена возможность скинуть заблокированное оружие с игрока после выдачи блокировки.
- Теперь при возвращение кнопкой "Назад" попадаешь в предыдущую директорию меню.
- Меню плагина переехало в root директорию админки.
- Теперь при продление блокировки игрок и администрация получит соответствующее сообщение в чат с общим кол-вом минут.
- Добавлено много различных информирующих уведомлений в чат.
- Оптимизация кода и прочие улучшения.

Узнать больше об этом обновлении...
 
Последнее редактирование:

akvorok.ego

Участник
Сообщения
314
Реакции
186
  • Автор ресурса
  • #15
Пользователь san911 обновил ресурс Player Weapon Blocker новой записью:

Мелкие поправки и улучшения.

Версия: 2.1.0

(Версия: 2.1.0) - Добавлена возможность ставить флаг(и)
доступа к меню, и уведомлений в чате. (Настройка в конфиге)
- Поправлен вывод сообщений администрации в чат.
- Поправлен список оружия для cs:go в конфиге.
- Обновлен натив SetClientWeaponBlock (Теперь можно выбросить заблокированное оружие у игрока из рук)
- Оптимизация кода и прочие улучшения.

Узнать больше об этом обновлении...
 
Последнее редактирование:

akvorok.ego

Участник
Сообщения
314
Реакции
186
  • Автор ресурса
  • #16
Пользователь san911 обновил ресурс Player Weapon Blocker новой записью:

Улучшения, исправления, оптимизация.

Версия: 2.1.1

(Версия: 2.1.1) - Добавлен форвард OnPlayerWeaponBlocker
- Оптимизация кода и прочие улучшения.

Версия: 2.1.2

(Версия: 2.1.2) - Исправлена выдача ножа при разблокировке оружия.

Узнать больше об этом обновлении...
 
Последнее редактирование:

Striker63

Участник
Сообщения
75
Реакции
22
Возможно, это прозвучит странно, но если держать открытым меню с выбором оружия для блокировки игроку и попытаться открыть админ-меню командой в это время, то сервер просто упадет без ошибок. Можно это исправить? Привык выходить так из менюшек всяких, легче, чем жать "Назад":D
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #19
@Striker63, @san911,
PHP:
case MenuAction_Cancel: 
        {
            CloseHandle(menu);
            if(param2 == MenuCancel_ExitBack) DisplayPlayerWeaponBlockerMenu(param1);
        }
CloseHandle(menu); всегда делается только в MenuAction_End и нигде больше!
 

Striker63

Участник
Сообщения
75
Реакции
22
Кто-то будет добр и зальет исправленный вариант? Плагин достаточно полезный.
 

Похожие темы

Сверху Снизу