Tech Works

FokS

Участник
Сообщения
422
Реакции
52
там только при смене карты конфиг теха остается
При полной перезагрузки соответственно выставляется параметр defailt 0

Хотя ща секунду ща будет)
админ с любыми правами остаётся на сервере? Просто у меня админы без флага "z" всё равно остаются на сервере, можно это исправить? И да в админ меню нет параметра, работает только через команду в консоль.
 

Felton

Участник
Сообщения
799
Реакции
59
Забил на этот плагин за ненадобностью так как меня устраивает переменная sv_password "")
Хочеш ботов можно установить bot_quota 4 или наоборот убрать bot_quota 0 для проверки или отладки плагина. После перезагрузке сервера а бывает и не раз нужна перезагрузка на сервер без пароля не пападёш .
А когда закончил дела на сервере можно и пароль снимать и всё ок!Всем удачи!
 
Последнее редактирование:

d4Ck

Урегулированный
Сообщения
730
Реакции
562
@parusstar,
Щас всё нормально но при смене карты ботов не кикнуло.Но иногда они нужны.Плагин нужно допиливать чтобы техработы были с ботами или без ботов.Перезагрузил сервер снял с себя права админа и я спокойно зашол.Об этом я писал на первой страницы.
Как я писал выше пока админ сам не снимет эту защиту никто не должен зайти на сервер даже после перезагрузки сервера
Омфг, ты хоть мой плагин то пробовал?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #44
Вообще, я редко вмешиваюсь в "обновления ресурса" от сторонних разрабов, но увидев отзыв на 1 звезду и выложенный насильно в треде обновление плагина от Райского, не мог не удержаться посмотреть в код Райского и @jasmine, оценить код и выложить своё мнение на этот счёт.
Начнём с кода Райского. Оффтоп
PHP:
TopMenuObject admtex;
Ну и зачем? Я не видел ни в одном плагине сохранение указателя на объект в админ-меню. Тем более с ним ничего не делается.
PHP:
g_cEnable = CreateConVar("sm_admtex_mode", "0", "Вкл/Выкл  технические работы на сервере!", FCVAR_DONTRECORD);
Зачем FCVAR_DONTRECORD? Тем более конвара и так не передаётся на клиенты. А даже если бы и передавалась, то клиент отвергал бы её, ибо подобной конвары нет у него самого.
PHP:
WorksTime = CreateConVar("sm_admtex_time", "10", "Сколько секунд оповещать о начале технических работ ? Def: 10", _, true, 0.0, true, 60.0);
Зачем написано дефолтное значение в Description?
Зачем висит максимальный лимит на время об оповещении о начале тех работ? Может, я хочу в течении 5-и минут оповещать своих игроков, но из-за потолка в минуту не могу?
PHP:
AutoExecConfig(true, "AdminTex");
Движок почему-то криво работает с конфигами, в имени которых содержатся буквы верхнего регистра. Не знаю, почему, но такой баг есть. Тем более конфиги плагинов запускает именно движок.
PHP:
FormatEx(buffer, maxlength, techworks ? "Перейти в игровой режим" : "Перейти в технический режим");
В том варианте, который я наблюдаю сейчас, логичнее было бы заюзать strcopy().
А если и юзать FormatEx(), то так:
PHP:
FormatEx(buffer, maxlength, "Перейти в %s режим", techworks ? "игровой" : "технический");

PHP:
if(object_id == admtex) ClientCommand(param, "sm_admtex");
Такие костыли поискать ещё, конечно, надо.
Не проще сделать ли прямой вызов каллбека команды? Она такая же функция, как и все.
PHP:
if(sec <= GetConVarInt(WorksTime))
GetConVarInt() - довольно ресурсозатратный вызов. Как и ConVar.IntValue.get, и ConVar.GetInt(). Лучше хукнуть, и отслеживать изменения.
PHP:
ServerCommand("sm_admtex_mode 1");
Тоже тот ещё костыль... Лучше так:
PHP:
g_cEnable.BoolValue = true;
PHP:
    if(newValue[0] == '1' && techworks == false)
   {
       techworks = true;
       GSTATUS();
       if(Start != null)
       {
           Start = null;
           sec = 0;
       }
   }
   else if(newValue[0] == '0' && techworks == true)
   {
       techworks = false;
   }
У меня фейспалм наидичайший...
PHP:
    techworks = (newValue[0] != '0');
    if (techworks)
    {
        GSTATUS();
        Start = null;
    }
PHP:
public void OnClientPostAdminCheck(int client)
{
   if(techworks && !IsFakeClient(client) && !IsClientAdmin(client))
       KickClient(client, "На сервере идут Технические работы.\nВход только для Администрации!\nПриносим свои извинения за доставленные неудобства.");
}

void GSTATUS()
{
   for(int i = 1; i <= MaxClients; i++)
   {
       if(IsClientInGame(i) && !IsFakeClient(i))
       {
           OnClientPostAdminCheck(i);
       }
   }
}
Для тех, кто не понял, за что я здесь зацепился:
PHP:
void GSTATUS()
{
    /* ... */
    if(/* ... */ && !IsFakeClient(i))
    /* ... */
}

public void OnClientPostAdminCheck(int client)
{
   if(/* ... */ && !IsFakeClient(client) && /* ... */)
   // ...
Зачем проверять игрока на бота два раза?! Много времени тик длится, что-ли?!
Снести нахер проверку из GSTATUS().

PHP:
public void OnLibraryRemoved(const char[] name) {if(StrEqual(name, "adminmenu")) g_TopMenu = null;}
А смысл? Указатель всё равно изменится.

PHP:
void PrintToChats()
{
	PrintToChatAll("Сервер переведён в %s!", techworks ? "технический режим" : "игровой режим");
}
По примеру выше, слово "режим" можно вынести из форматирования.
PHP:
void PrintToChats()
{
	PrintToChatAll("Сервер переведён в %s режим!", techworks ? "технический" : "игровой");
}
Вообще, я ненавижу KeyValues, но в этот раз закрою глаза на него. Если он, конечно, правильно использоваться будет.
PHP:
Handle g_hKV = INVALID_HANDLE;
Ну, INVALID_HANDLE так-то устарел. Ему на замену пришёл null. И переменная и так по дефолту будет равна ему. Зачем явно присваивать - не ясно.
PHP:
bool g_bServerLock = false;
Тоже самое. bool из коробки уже false.
PHP:
		TopMenu hTopMenu;
		hTopMenu = GetAdminTopMenu();
А не проще сразу присвоить? Меньше опкода сгенерируется.
PHP:
public void OnLibraryRemoved(const char[] szName)
{
    if (StrEqual(szName, "adminmenu")) 
		g_hAdminMenu = null;
}
Наследие от Райского, которое тоже по сути не нужно. Те, кто читали спойлер про Райского - поймут.
PHP:
FormatEx(sBuffer, maxlength, g_bServerLock ? "Открыть сервер" : "Закрыть сервер");
Тот же самый косяк, что и у Райского. См. спойлер про него.
PHP:
ServerCommand("sm_sl_lock");
Опять этот великий костыль... Та же проблема, что и у Райского.
PHP:
public void OnPluginStart() {
  // ...
  RegAdminCmd("sm_sl_lock", cmdLockAdmin, ADMFLAG_ROOT);
  // ...
  RegAdminCmd("sm_sl_reload", cmdReloadAdmin, ADMFLAG_ROOT);
  // ...
}

public Action cmdLockAdmin(int client, int args)
{
  ServerCommand("sm_sl_lock");
}

public Action cmdReloadAdmin(int client, int args)
{
  ServerCommand("sm_sl_lock");
}
upload_2018-4-8_12-28-19.png

Вот это вообще поворот. Две казалось бы разные команды, а делают одно и то же. Да и внешне вообще на рекурсию похоже. Особенно без проверки на клиента.
Ещё return Plugin_Handled; нет. Печально. В этом плане d4Ck скатился.

PHP:
	LoadCfg();
	
	KvSetNum(g_hKV, "server_lock", (g_bServerLock ? 0 : 1));
	KvSetString(g_hKV, "white_list", g_sWhiteList);
	KeyValuesToFile(g_hKV, g_sPatch); 
	
	LoadCfg();
Ну и зачем повторно загружать конфиг?

PHP:
		if(StrContains(g_sWhiteList, sAuth, false) == -1)
			KickClient(client, "Доступ к серверу временно ограничен!\nПожалуйста попробуйте позже");
А вот тут я вижу баг. Если в вайтлисте есть юзер с SteamID STEAM_0:0:55665612, а на сервер зайдёт, допустим, юзер с SteamID STEAM_0:0:556656121, то его пропустит.

Краткий вердикт для тех, кому лень читать спойлеры: код у d4Ck местами хуже, чем у Райского. Много "наследия" от Райского. И ещё больше косяков.
В такие моменты невольно задаёшься вопросом, не проще ли сделать свою, адекватную реализацию?
 

Kailo

Участник
Сообщения
194
Реакции
896

Kailo

Участник
Сообщения
194
Реакции
896
Пользователь Kailo обновил ресурс Tech Works новой записью:

Обновление.

Исправлены важные недоработки, рекомендуется обновление.
  • Исправлена работа обратного отсчёта.
  • Исправлен режим techworkstime когда он получал 0 и сохранял ничего =D.
  • Добавлена переменная enablesound (Вкл/выкл звук при отсчёте)
  • Мелкие исправления.

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

xXMaXimXx

хХх
Сообщения
511
Реакции
53
Можно сделать так, чтобы при отсчете, например 10 секунд, женским голосом отсчитывало ?
 

Kailo

Участник
Сообщения
194
Реакции
896
Пользователь Kailo обновил ресурс Tech Works новой записью:

Обновление.

  • Оптимизация кода.
  • В Панели администратора (Управление сервером) появился пункт Управление TechWorks.
  • Изменена функция timer (Закрытие сервера на время).
  • При кике игрока покажет H:M:S когда сервер будет доступен
  • Добавлена функция перезагрузки сервера без потери игроков

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

StormX

Участник
Сообщения
891
Реакции
302
Эх думал заведется на 34-ке sourcemod 1.9

L 04/22/2018 - 11:32:58: [SM] Exception reported: Invalid key value handle 0 (error 4)
L 04/22/2018 - 11:32:58: [SM] Blaming: TechWorks.smx
L 04/22/2018 - 11:32:58: [SM] Call stack trace:
L 04/22/2018 - 11:32:58: [SM] [0] KeyValues.GetNum
L 04/22/2018 - 11:32:58: [SM] [1] Line 257, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::status
L 04/22/2018 - 11:32:58: [SM] [2] Line 55, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::loads
L 04/22/2018 - 11:32:58: [SM] [3] Line 72, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::OnPluginStart
L 04/22/2018 - 11:32:58: [SM] Unable to load plugin "TechWorks.smx": Error detected in plugin startup (see error logs)
 

Kailo

Участник
Сообщения
194
Реакции
896
Эх думал заведется на 34-ке sourcemod 1.9

L 04/22/2018 - 11:32:58: [SM] Exception reported: Invalid key value handle 0 (error 4)
L 04/22/2018 - 11:32:58: [SM] Blaming: TechWorks.smx
L 04/22/2018 - 11:32:58: [SM] Call stack trace:
L 04/22/2018 - 11:32:58: [SM] [0] KeyValues.GetNum
L 04/22/2018 - 11:32:58: [SM] [1] Line 257, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::status
L 04/22/2018 - 11:32:58: [SM] [2] Line 55, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::loads
L 04/22/2018 - 11:32:58: [SM] [3] Line 72, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::OnPluginStart
L 04/22/2018 - 11:32:58: [SM] Unable to load plugin "TechWorks.smx": Error detected in plugin startup (see error logs)
Решение: Если файл "<sourcemod>/configs/techworks.ini" существует все будет работать без ошибок. Если его нет, то при первом запуске он создаст его, а потом кинет эту ошибку. Раз файл теперь будет существовать, просто перезагрузите плагин и он будет работать.
Технические подробности: Да, автор чего-то начудил. Если файл отсутствует, то он создает новый, а затем почему-то удаляет Handle, исправим.
 

StormX

Участник
Сообщения
891
Реакции
302
Решение: Если файл "<sourcemod>/configs/techworks.ini" существует все будет работать без ошибок. Если его нет, то при первом запуске он создаст его, а потом кинет эту ошибку. Раз файл теперь будет существовать, просто перезагрузите плагин и он будет работать.
Технические подробности: Да, автор чего-то начудил. Если файл отсутствует, то он создает новый, а затем почему-то удаляет Handle, исправим.

Спасибо, завелся).
 

xXMaXimXx

хХх
Сообщения
511
Реакции
53
Долбит в консоль. Сервер лагать начинает.

SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
SV_StartSound: *techworks.wav not precached (0)
 

FokS

Участник
Сообщения
422
Реакции
52
Админы без ROOT прав остаются на сервере всё равно, как сделать чтобы их тоже кикало?
 

Tomich

Участник
Сообщения
177
Реакции
46
В чем проблема?

L 05/08/2018 - 22:48:26: [SM] Blaming: TechWorks.smx
L 05/08/2018 - 22:48:26: [SM] Call stack trace:
L 05/08/2018 - 22:48:26: [SM] [0] KeyValues.GetNum
L 05/08/2018 - 22:48:26: [SM] [1] Line 257, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::status
L 05/08/2018 - 22:48:26: [SM] [2] Line 55, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::loads
L 05/08/2018 - 22:48:26: [SM] [3] Line 72, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::OnPluginStart
L 05/08/2018 - 22:48:26: [SM] Unable to load plugin "TechWorks.smx": Error detected in plugin startup (see error logs)
 

Livindege

Live in page, that's why Livindege
Сообщения
95
Реакции
55
В чем проблема?

L 05/08/2018 - 22:48:26: [SM] Blaming: TechWorks.smx
L 05/08/2018 - 22:48:26: [SM] Call stack trace:
L 05/08/2018 - 22:48:26: [SM] [0] KeyValues.GetNum
L 05/08/2018 - 22:48:26: [SM] [1] Line 257, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::status
L 05/08/2018 - 22:48:26: [SM] [2] Line 55, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::loads
L 05/08/2018 - 22:48:26: [SM] [3] Line 72, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::OnPluginStart
L 05/08/2018 - 22:48:26: [SM] Unable to load plugin "TechWorks.smx": Error detected in plugin startup (see error logs)
Какой соурс мод используйте?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #57
@Tomich, логи полные пожалуйста приведите. Они всегда начинаются с Exception reported, а не Blaming.
 

Tomich

Участник
Сообщения
177
Реакции
46
@Tomich, логи полные пожалуйста приведите. Они всегда начинаются с Exception reported, а не Blaming.
Замял почему то начало извиняюсь.

L 05/08/2018 - 22:48:26: [SM] Exception reported: Invalid key value handle 0 (error 4)
L 05/08/2018 - 22:48:26: [SM] Blaming: TechWorks.smx
L 05/08/2018 - 22:48:26: [SM] Call stack trace:
L 05/08/2018 - 22:48:26: [SM] [0] KeyValues.GetNum
L 05/08/2018 - 22:48:26: [SM] [1] Line 257, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::status
L 05/08/2018 - 22:48:26: [SM] [2] Line 55, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::loads
L 05/08/2018 - 22:48:26: [SM] [3] Line 72, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::OnPluginStart
L 05/08/2018 - 22:48:26: [SM] Unable to load plugin "TechWorks.smx": Error detected in plugin startup (see error logs)

Какой соурс мод используйте?
SourceMod (1.9.0.6225) by AlliedModders LLC
 

Livindege

Live in page, that's why Livindege
Сообщения
95
Реакции
55
Замял почему то начало извиняюсь.

L 05/08/2018 - 22:48:26: [SM] Exception reported: Invalid key value handle 0 (error 4)
L 05/08/2018 - 22:48:26: [SM] Blaming: TechWorks.smx
L 05/08/2018 - 22:48:26: [SM] Call stack trace:
L 05/08/2018 - 22:48:26: [SM] [0] KeyValues.GetNum
L 05/08/2018 - 22:48:26: [SM] [1] Line 257, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::status
L 05/08/2018 - 22:48:26: [SM] [2] Line 55, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::loads
L 05/08/2018 - 22:48:26: [SM] [3] Line 72, C:\Users\SOURCEPAWN-AIKI\Desktop\scripting\TechWorks.sp::OnPluginStart
L 05/08/2018 - 22:48:26: [SM] Unable to load plugin "TechWorks.smx": Error detected in plugin startup (see error logs)


SourceMod (1.9.0.6225) by AlliedModders LLC
Скиньте ваш пример конфига techworks.ini
 

Похожие темы

Сверху Снизу