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

Сообщения
10
Реакции
0
А нагрузка на сервер больше от чего? Проверка баланса раз скажем в 20 секунд, или постоянное отслеживание входящих\выходящих?

Добавлено через 12 минут
Александр Гужов, пробуй мой. Это ещё бета. Настроен по умолчанию по таймеру, перемещает после смерти человека. Квары смотри в исходнике, прописывай если что в server.cfg
Еще не опробовал, но при обсуждении на сервере, игроки как один захотели плюсом к надписи о перекидывании, еще и временное изменение цвета экрана. Красный за теров и синий за ментов. В жесточайших схватках не все смотрят на сообщения экрана :).
 
Последнее редактирование:

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Александр Гужов, ну если много будет переходить с одной команду в другую и часто, если при подключение, то так же если сразу несколько человек выйдет или зайдёт. Как писал ранее у каждого способа свои плюсы и минусы.

AlmazON, это если очень маленькое время, а если 30 или 60 секунд то это не большая нагрузка.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
то это не большая нагрузка
Это если бы в таймере что-то просто сохранять. А тут: считается количество в команде и соответствие каждый раз + похоже, сохраняется (ожидание смерти игрока), либо сразу переброска мёртвых (цикл тоже вносит свой вклад).
много будет переходить с одной команду в другую и часто, если при подключение, то так же если сразу несколько человек выйдет или зайдёт
Тут самую большую нагрузку внесёт лишь сам Event: получение с него команды игрока, да его индекс. А дальше лишь простейшая манипуляция переменными +/-.
 
Сообщения
10
Реакции
0
Так, стоп!
....Тут самую большую нагрузку внесёт лишь сам Event: получение с него команды игрока, да его индекс. А дальше лишь простейшая манипуляция переменными +/-.
Откуда Event? Или это профессиональный сленг? У меня SM стоит :no:
 
Сообщения
10
Реакции
0
AlmazON, Просмотрел сейчас тему с твоим плагином баланса, так ты там написал что не факт работы выше версии 1.7, а у меня версия 1.8 :(.
Серый™ Мы в дебатах пропустили вопрос о возможности изменения цвета экрана при перемещении, насколько сложно это сделать?
 

lansy

Участник
Сообщения
58
Реакции
2
Нужен плагин, который будет через определённый промежуток времени проверять переменную fps_max и если значение будет ниже 60 плагин должен поменять это значение у игрока (если это возможно) если нет, то просто кикнуть с причиной (изменить переменную... Бла бла) да я знаю, что существует zblock там или кас, но мне нужен именно отдельный плагин. Если кому-то не трудно)

Добавлено через 9 часов 52 минуты
Актуально ^

Добавлено через 9 часов 54 минуты
Александр Гужов, Оффтоп

Сможешь написать такой плагин? Если платно цену скажи)
 
Последнее редактирование:

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Нужен плагин, который будет через определённый промежуток времени проверять переменную fps_max и если значение будет ниже 60 плагин должен поменять это значение у игрока (если это возможно) если нет, то просто кикнуть с причиной (изменить переменную... Бла бла) да я знаю, что существует zblock там или кас, но мне нужен именно отдельный плагин. Если кому-то не трудно)

Добавлено через 9 часов 52 минуты
Актуально ^

Добавлено через 9 часов 54 минуты


Сможешь написать такой плагин? Если платно цену скажи)


PHP:
#include <sourcemod>
 
#define PLUGIN_NAME                                     "MinFPS"
#define PLUGIN_AUTHOR                           "Tony G."
#define PLUGIN_DESCRIPTION      "Kicks a player if his/her fps_max convar value is below the value of 72."
#define PLUGIN_VERSION                  "1.0"
#define PLUGIN_URL                                      "http://www.sourcemod.net/"
 
public Plugin:myinfo = {name = PLUGIN_NAME, author = PLUGIN_AUTHOR, description = PLUGIN_DESCRIPTION, version = PLUGIN_VERSION, url = PLUGIN_URL};
 
public OnPluginStart()
{
        CreateConVar("sm_minfps_version", PLUGIN_VERSION, "MinFPS", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
        CreateTimer(10.0, TriggerFPSCheck, _, TIMER_REPEAT);
}
 
public OnClientPostAdminCheck(client)
{
        QueryClientConVar(client, "fps_max", ConVarQueryFinished:FPSCheck, client);
}
 
public Action:TriggerFPSCheck(Handle:timer)
{
        for (new client = 1; client <= MaxClients; client++)
        {
                if (IsClientInGame(client) && !IsClientObserver(client))
                {
                        QueryClientConVar(client, "fps_max", ConVarQueryFinished:FPSCheck, client);
                }
        }
       
        return Plugin_Continue;
}
 
public FPSCheck(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
{
        if (IsClientConnected(client))
        {
                new fps_max = StringToInt(cvarValue);
               
                if (fps_max < 72 && fps_max != 0)
                {
                        KickClient(client, "Please set your fps_max value to at least 72");
                }
        }
}
 

lansy

Участник
Сообщения
58
Реакции
2
2 сек испытаем)

Добавлено через 29 минут
PHP:
#include <sourcemod>
 
#define PLUGIN_NAME                                     "MinFPS"
#define PLUGIN_AUTHOR                           "Tony G."
#define PLUGIN_DESCRIPTION      "Kicks a player if his/her fps_max convar value is below the value of 72."
#define PLUGIN_VERSION                  "1.0"
#define PLUGIN_URL                                      "http://www.sourcemod.net/"
 
public Plugin:myinfo = {name = PLUGIN_NAME, author = PLUGIN_AUTHOR, description = PLUGIN_DESCRIPTION, version = PLUGIN_VERSION, url = PLUGIN_URL};
 
public OnPluginStart()
{
        CreateConVar("sm_minfps_version", PLUGIN_VERSION, "MinFPS", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
        CreateTimer(10.0, TriggerFPSCheck, _, TIMER_REPEAT);
}
 
public OnClientPostAdminCheck(client)
{
        QueryClientConVar(client, "fps_max", ConVarQueryFinished:FPSCheck, client);
}
 
public Action:TriggerFPSCheck(Handle:timer)
{
        for (new client = 1; client <= MaxClients; client++)
        {
                if (IsClientInGame(client) && !IsClientObserver(client))
                {
                        QueryClientConVar(client, "fps_max", ConVarQueryFinished:FPSCheck, client);
                }
        }
       
        return Plugin_Continue;
}
 
public FPSCheck(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
{
        if (IsClientConnected(client))
        {
                new fps_max = StringToInt(cvarValue);
               
                if (fps_max < 72 && fps_max != 0)
                {
                        KickClient(client, "Please set your fps_max value to at least 72");
                }
        }
}


Благодарю все идеально работает)
 
Последнее редактирование:

Metamoto

Участник
Сообщения
407
Реакции
14
Ребят, напишите пожалуйста простенький плагин, он должен быть на подобии stb2 чтобы через меню админское банить людей и выбирать на сколько времени, а так же, чтобы можно было разбанивать через меню. База данных локальная. Ну и естественно, чтобы при выборе забаненного игрока показывало сколько ему осталось и с какого по какое он забанен, и чтобы была видна причина(но это не обязательно) Пожалуйста ответьте это же возможно?
 
Сообщения
10
Реакции
0
Александр Гужов, пробуй мой. Это ещё бета. Настроен по умолчанию по таймеру, перемещает после смерти человека. Квары смотри в исходнике, прописывай если что в server.cfg
Либо лыжи не едут, либо лето наступило :).
Закинул плагин на временный сервер WCS, на компе, проверяю список плагинов
C-подобный:
HTML:
Оффтоп
Проверяю что стоит по умолчанию
Оффтоп
Ага, наверное нужно с пробелами?
Оффтоп
А вроде должно выдаваться что-то типа ответа сервера, как скажем на
Оффтоп
Или этот плагин работает только через файл конфигурации Balanser.cfg?
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Александр Гужов, это серверная переменная нужно водить через ркон чтоб увидеть его значение, пример "sm_rcon sm_bal_metod"
 
Сообщения
10
Реакции
0
Александр Гужов, это серверная переменная нужно водить через ркон чтоб увидеть его значение, пример "sm_rcon sm_bal_metod"
Да, забил в консоли сервера, получил
Оффтоп
Это я ступил :oops:

Добавлено через 3 часа 14 минут
А как переделать другой плагин? Ну чтобы скажем плагин "Admin Menu" (1.7.3-dev+5275) by AlliedModders LLC в определенном пункте работал по другому?
Есть там пунктик, с изменением игрового ника, так он просто меняет на беспорядочный набор букв и символов, хочется свои вставить, потому что нечитабельные ники запрещены (для облегчения общения игроков), менять плагин, или можно сделать надстройку, в виде отдельного плагина?
 
Последнее редактирование:
Сообщения
22
Реакции
0
1.Teamswitch.smx
2. Этот плагин пригодиться для Bhop,Mg Как нам известно что на таких модах можно зайти только за одну команду.Ну так вот Если можно зайти только за террористов но он нажимает за кт что бы его сразу кидало за Теров вот пример.
На сервере перебрал все 110 плагинов, не нашёл как я понял это самопис.

Я находил аналог но его надо настраивать в кфг, в добавок он багаеться так и ещё если на карте можно зайти за обе команды и ты запрещаешь например заходить за кт он все равно пускает за кт но сразу перекидывает за т, но раунд уже закончился, а это не хорошо.(Это для нытиков, что есть много таких плагинов, но я не где не нашёл что мене нужноТык)
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Александр Гужов, можно сделать изменение ников через adminmenu_custom.txt
PHP:
"PlayerCommands"
    {
        "admin"        "sm_ban"
        "Сменить ник"
        {
            "cmd"        "sm_rename #1 #2"
            "execute"    "player"
            "1"
            {
                "type"         "player"
                "method"    "userid"
                "title"        "Игроки:"
            }
            "2"
            {
                "type"         "list"
                "title"        "Ник"
                "1"        "♒•РуКи⇒ЖоПы•♒"
                "2"        "♒СмеНи НиК♒"
                "3"     "♒Я ГоВно ЧиТеР♒"
                "4"     "♒Я НуБ ЧиТеР♒"
                "5"     "♒Я ВХ НуБ♒"
                "6"     "♒Я НуБяРа♒"
                "7"    "♒ДуРьМо⇒уШаМи♒"
                "8"    "☣НуБьЁ☣"
                "9"    "*ټ*ЧиТеР*ټ*"
                "10"    "♒ДуРьМо СпаМеР♒"
            }
        }
    }
а сортировку (adminmenu_sorting.txt) можешь добавить
"item" "Сменить ник"

Не забывай про кодировку (utf-8 без bom) иначе работать не будет.
 

Metamoto

Участник
Сообщения
407
Реакции
14
ребят, напишите пожалуйста простенький плагин, он должен быть на подобии stb2 чтобы через меню админское банить людей и выбирать на сколько времени, а так же, чтобы можно было разбанивать через меню. База данных локальная. Ну и естественно, чтобы при выборе забаненного игрока показывало сколько ему осталось и с какого по какое он забанен, и чтобы была видна причина(но это не обязательно) Пожалуйста ответьте это же возможно?
 

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
чтобы не создавать новую тему пишу сюда, имеется код аптечки, проблема в том, что игроки застревают в ней, когда она на земле
PHP:
public Action:OnTouch(medkit, entity)
{
if (entity < 1 || entity > MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity) || GetEntProp(medkit, Prop_Send, "m_PredictableID") == entity || GetClientHealth(entity) == 100) {
return;
}

SetEntityHealth(entity, GetEntProp(entity, Prop_Data, "m_iMaxHealth"));

new Float:origin[3];
EmitSoundToAll(HEALTHKIT_SOUND, entity, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, origin, NULL_VECTOR, true, 0.0);

AcceptEntityInput(medkit, "Kill");
if (g_hMedKitTimer[medkit] != INVALID_HANDLE)
CloseHandle(g_hMedKitTimer[medkit]);

g_hMedKitTimer[medkit] = INVALID_HANDLE;
}
Пытаюсь исправить этим
PHP:
public Action:OnTouch(medkit, entity)
{
    if (entity < 1 || entity > MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity) || GetEntProp(medkit, Prop_Send, "m_PredictableID") == entity || GetClientHealth(entity) == 100) {
        SetEntProp(medkit, Prop_Data, "m_CollisionGroup", 2);
        return;
    }
    
    SetEntityHealth(entity, GetEntProp(entity, Prop_Data, "m_iMaxHealth"));
    
    new Float:origin[3];
    EmitSoundToAll(HEALTHKIT_SOUND, entity, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, origin, NULL_VECTOR, true, 0.0);
        
    AcceptEntityInput(medkit, "Kill");
    if (g_hMedKitTimer[medkit] != INVALID_HANDLE)
        CloseHandle(g_hMedKitTimer[medkit]);
    
    g_hMedKitTimer[medkit] = INVALID_HANDLE;
}
игроки перестают застревать, но аптечка перестает выполнять свою функцию лечить игроков, она просто лежит на земле, что я делаю не так?
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
чтобы не создавать новую тему пишу сюда, имеется код аптечки, проблема в том, что игроки застревают в ней, когда она на земле
PHP:
public Action:OnTouch(medkit, entity)
{
if (entity < 1 || entity > MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity) || GetEntProp(medkit, Prop_Send, "m_PredictableID") == entity || GetClientHealth(entity) == 100) {
return;
}

SetEntityHealth(entity, GetEntProp(entity, Prop_Data, "m_iMaxHealth"));

new Float:origin[3];
EmitSoundToAll(HEALTHKIT_SOUND, entity, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, origin, NULL_VECTOR, true, 0.0);

AcceptEntityInput(medkit, "Kill");
if (g_hMedKitTimer[medkit] != INVALID_HANDLE)
CloseHandle(g_hMedKitTimer[medkit]);

g_hMedKitTimer[medkit] = INVALID_HANDLE;
}
Пытаюсь исправить этим
PHP:
public Action:OnTouch(medkit, entity)
{
    if (entity < 1 || entity > MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity) || GetEntProp(medkit, Prop_Send, "m_PredictableID") == entity || GetClientHealth(entity) == 100) {
        SetEntProp(medkit, Prop_Data, "m_CollisionGroup", 2);
        return;
    }
    
    SetEntityHealth(entity, GetEntProp(entity, Prop_Data, "m_iMaxHealth"));
    
    new Float:origin[3];
    EmitSoundToAll(HEALTHKIT_SOUND, entity, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, origin, NULL_VECTOR, true, 0.0);
        
    AcceptEntityInput(medkit, "Kill");
    if (g_hMedKitTimer[medkit] != INVALID_HANDLE)
        CloseHandle(g_hMedKitTimer[medkit]);
    
    g_hMedKitTimer[medkit] = INVALID_HANDLE;
}
игроки перестают застревать, но аптечка перестает выполнять свою функцию лечить игроков, она просто лежит на земле, что я делаю не так?

Ты делаешь все правильно, но аптечка потеряла свою колизию, тебе нужно вернуть колизию аптечке.
С колизиями у меня беда, помочь не смогу.
 

Reg1oxeN

Участник
Сообщения
399
Реакции
314
чтобы не создавать новую тему пишу сюда, имеется код аптечки, проблема в том, что игроки застревают в ней, когда она на земле
PHP:
public Action:OnTouch(medkit, entity)
{
if (entity < 1 || entity > MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity) || GetEntProp(medkit, Prop_Send, "m_PredictableID") == entity || GetClientHealth(entity) == 100) {
return;
}

SetEntityHealth(entity, GetEntProp(entity, Prop_Data, "m_iMaxHealth"));

new Float:origin[3];
EmitSoundToAll(HEALTHKIT_SOUND, entity, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, origin, NULL_VECTOR, true, 0.0);

AcceptEntityInput(medkit, "Kill");
if (g_hMedKitTimer[medkit] != INVALID_HANDLE)
CloseHandle(g_hMedKitTimer[medkit]);

g_hMedKitTimer[medkit] = INVALID_HANDLE;
}
Пытаюсь исправить этим
PHP:
public Action:OnTouch(medkit, entity)
{
    if (entity < 1 || entity > MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity) || GetEntProp(medkit, Prop_Send, "m_PredictableID") == entity || GetClientHealth(entity) == 100) {
        SetEntProp(medkit, Prop_Data, "m_CollisionGroup", 2);
        return;
    }
    
    SetEntityHealth(entity, GetEntProp(entity, Prop_Data, "m_iMaxHealth"));
    
    new Float:origin[3];
    EmitSoundToAll(HEALTHKIT_SOUND, entity, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, origin, NULL_VECTOR, true, 0.0);
        
    AcceptEntityInput(medkit, "Kill");
    if (g_hMedKitTimer[medkit] != INVALID_HANDLE)
        CloseHandle(g_hMedKitTimer[medkit]);
    
    g_hMedKitTimer[medkit] = INVALID_HANDLE;
}
игроки перестают застревать, но аптечка перестает выполнять свою функцию лечить игроков, она просто лежит на земле, что я делаю не так?

копай в эту сторону.
PHP:
if (DispatchSpawn(entity)) {
SetEntProp(entity, Prop_Send, "m_usSolidFlags", 8);
SetEntProp(entity, Prop_Send, "m_nSolidType", 6);
}
возможно эти значения как раз и подойдут.
 
Сверху Снизу