Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

FPS кикер

loran
сообщение 18.3.2017, 17:00
Сообщение #1
Стаж: 10 лет

Сообщений: 2072
Благодарностей: 801
Полезность: 305

Ребят есть плагин от Стимула. Как сделать так, чтобы проверка игроков на ФПС была раз в 5 минут например

Cкрытый текст
Код
#include <amxmodx>

#define PLUGIN   "Fps Kicker"
#define VERSION   "1.0"
#define AUTHOR   "Stimul"

#define MAX_CLIENTS   32
#define MAX_FPS   115

new g_iFps[MAX_CLIENTS+1];

public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR);
    
   set_task(1.0, "CheckFps", .flags = "b");
}

public CheckFps()
{
   new iPlayers[MAX_CLIENTS], iNum;
   get_players(iPlayers, iNum, "c");
    
   for(new i; i < iNum; i++)
   {
      if(g_iFps[iPlayers[i]] > MAX_FPS)
      {
         server_cmd("kick #%d ^"Ваш FPS %d слишком высокий, понизьте значение fps_max!^"", get_user_userid(iPlayers[i]), g_iFps[iPlayers[i]]);
         server_exec();
      }
      
      g_iFps[iPlayers[i]] = false;
   }
}

public client_PreThink(id)
   g_iFps[id]++;
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя panda08
сообщение 18.3.2017, 18:10
Сообщение #2


Стаж: 12 лет

Сообщений: 116
Благодарностей: 23
Полезность: 130

loran,

set_task(300.0, "CheckFps", .flags = "b");
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 18.3.2017, 18:35
Сообщение #3


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

panda08, и кикнет всех. Т.к. в этом таске происходит обнуление фпс, а фпс там натикает за 5 минут.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя panda08
сообщение 18.3.2017, 18:49
Сообщение #4


Стаж: 12 лет

Сообщений: 116
Благодарностей: 23
Полезность: 130

Цитата(Mistrick @ 18.3.2017, 20:35) *
panda08, и кикнет всех. Т.к. в этом таске происходит обнуление фпс, а фпс там натикает за 5 минут.

Разве? Я открыл сполер на 1 сек. и написал, как я подумал тогда, правильный ответ.
Так напиши что нужно делать, как по твоему правильно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 18.3.2017, 18:53
Сообщение #5


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Поясните мне, а зачем кикать игроков у которых фпс больше 115 ?


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя XakepSDK
сообщение 18.3.2017, 19:06
Сообщение #6
Стаж: 11 лет

Сообщений: 60
Благодарностей: 13
Полезность: 169

loran,
code
Код:

#include <amxmodx>

#define PLUGIN "Fps Kicker"
#define VERSION "1.0"
#define AUTHOR "Stimul"

#define MAX_CLIENTS 32
#define MAX_FPS 115
#define CHECK_TIME 300

new g_iFps[MAX_CLIENTS+1];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

set_task(CHECK_TIME, "CheckFps", .flags = "b");
}

public CheckFps()
{
new iPlayers[MAX_CLIENTS], iNum;
get_players(iPlayers, iNum, "c");

for(new i; i < iNum; i++)
{
if((g_iFps[iPlayers[i]] / CHECK_TIME) > MAX_FPS)
{
server_cmd("kick #%d ^"Ваш FPS %d слишком высокий, понизьте значение fps_max!^"", get_user_userid(iPlayers[i]), g_iFps[iPlayers[i]]);
server_exec();
}

g_iFps[iPlayers[i]] = false;
}
}

public client_PreThink(id)
g_iFps[id]++;

Тогда считать надо средний FPS. Может быть есть и лучше методы проверки, но я скрипты никогда в жизни не писал, не знаю всех тонкостей.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 18.3.2017, 19:46
Сообщение #7


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

XakepSDK, уже лучше(будут варнинги из-за несоответствие тегов). Но будут ложные, если игрок вышел, прошла проверка и на этот слот зашел другой. Т.е. обнуление только для активных игроков. Можно добавить обнуление при дисконнекте.

Отредактировал: Mistrick, - 18.3.2017, 19:46
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
loran
сообщение 18.3.2017, 22:10
Сообщение #8
Стаж: 10 лет

Сообщений: 2072
Благодарностей: 801
Полезность: 305

Цитата(Mistrick @ 18.3.2017, 20:46) *
XakepSDK, уже лучше(будут варнинги из-за несоответствие тегов). Но будут ложные, если игрок вышел, прошла проверка и на этот слот зашел другой. Т.е. обнуление только для активных игроков. Можно добавить обнуление при дисконнекте.

Сделаешь, как считаешь правильно? у тебя опыт в этой сфере большой. Вся надежда на тебя. Нужен готовый код естественно, так как я в этом деле полный ноль здесь. Ну или сделать это в твоем плагине

Cкрытый текст
Код
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "FPS Hack Detector"
#define VERSION "1.0"
#define AUTHOR "Mistrick + Seroff"

new g_iFPS[33], g_iFrame[33], g_iMaxPlayers;

public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR);
   register_forward(FM_PlayerPostThink, "FM_PlayerPostThink_Pre", 0);
   register_forward(FM_PlayerPostThink, "FM_PlayerPostThink_Post", 1);
   set_task(1.0, "CheckFps", _, _, _, "b");
   g_iMaxPlayers = get_maxplayers();
}

public client_putinserver(id){
   g_iFPS[id]=0;
}

public FM_PlayerPostThink_Pre(id)
{
   if(!is_user_alive(id)) return FMRES_IGNORED;
   g_iFrame[id] += 1;
   return FMRES_IGNORED;
}

public FM_PlayerPostThink_Post(id)
{
   if(!is_user_alive(id)) return FMRES_IGNORED;
   new fps=g_iFPS[id]-5;
   if( fps > 115 || fps < -5){
    server_cmd("kick #%d ^"Ваш FPS слишком высокий, понизьте значение fps_max!^"",get_user_userid(id));
    log_to_file("addons/amxmodx/logs/fpshack.log","Player: %s FPS: [%d]",get_name(id),fps);
   }
   return FMRES_IGNORED;
}

public CheckFps()
{
   static id;
   for(id = 1; id <= g_iMaxPlayers; id++)
   {
      if(!is_user_alive(id)) continue;
      g_iFPS[id] = g_iFrame[id];
      g_iFrame[id] = 0;
   }
}

stock get_name(id){
  new Name[33];
  get_user_name(id,Name,charsmax(Name));
  return Name;
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя XakepSDK
сообщение 19.3.2017, 9:03
Сообщение #9
Стаж: 11 лет

Сообщений: 60
Благодарностей: 13
Полезность: 169

pawn
Код:

#include <amxmodx>

#define PLUGIN "Fps Kicker"
#define VERSION "1.0"
#define AUTHOR "Stimul"

#define MAX_CLIENTS 32
#define MAX_FPS 115
#define CHECK_TIME 300.0

new g_iFps[MAX_CLIENTS+1];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

set_task(CHECK_TIME, "CheckFps", .flags = "b");
}

public CheckFps()
{
new iPlayers[MAX_CLIENTS], iNum;
get_players(iPlayers, iNum, "c");

for(new i; i < iNum; i++)
{
if((g_iFps[iPlayers[i]] / CHECK_TIME) > MAX_FPS)
{
server_cmd("kick #%d ^"Ваш FPS %d слишком высокий, понизьте значение fps_max!^"", get_user_userid(iPlayers[i]), g_iFps[iPlayers[i]]);
server_exec();
}

g_iFps[iPlayers[i]] = false;
}
}

public client_PreThink(id) {
g_iFps[id]++;
}

public client_disconnected(id) {
g_iFps[id] = 0;
}


Убрал warning и добавил очистку в массиве.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя GDon
сообщение 19.3.2017, 9:09
Сообщение #10


Стаж: 12 лет

Сообщений: 267
Благодарностей: 60
Полезность: 124

Зачем кикать за высокий фпс?


*_*_*_*_*_*_*_*_*_*_ВСЕ_О_КС_*_*_*_*_*_*_*_*_*_*
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 19.3.2017, 9:24
Сообщение #11


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Код:
public client_PreThink(id)

Цитата
Функции client_PreThink и client_PostThink вызываются каждый кадр игрока, если FPS у игрока 30 - то будет вызвано 30 раз в секунду, если 100 то сто раз. Отличаются функции только тем что одна вызывается до кадра, вторая после. Обращаю сразу же ваше внимание, что данные функци Очень сильно нагружают сервер. не используйте их без крайней необходимости.

А потом орут, почему стрельба говно и фпс сервера проседает.

Цитата(GDon @ 19.3.2017, 9:09) *
Зачем кикать за высокий фпс?

Чтобы не было комфортной игры игрокам.

1. У кого моники по 144Гц могут иметь настоящие 144фпс но не будут из-за таких плагинов.
2. У меня и многих моих знакомых хоть моник 75Гц но при 200 фпс не рвет картинку и плавнее.


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 19.3.2017, 10:08
Сообщение #12


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

ssx, ага, одна операция инкримента посадит серверный фпс.
loran, смысл проверки раз в 5 минут, если фпс надо всегда считать? Сам подсчет не ресурсоемкий.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
loran
сообщение 19.3.2017, 15:41
Сообщение #13
Стаж: 10 лет

Сообщений: 2072
Благодарностей: 801
Полезность: 305

Mistrick, проверка по стандарту осуществляется каждую секунду. Меня например переодически кикает с сервера. Причем плагин рисует что фпс якобы у меня был 170 например. Когда по факту у меня выше 100 никогда не поднимается. Я поэтому хочу сделать проверку раз в 5 минут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
EvilSMS
сообщение 19.3.2017, 16:12
Сообщение #14
Стаж: 10 лет

Сообщений: 1801
Благодарностей: 410
Полезность: < 0

GDon, например чтоб на deathrun - серверах, не проходили быстро карту.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя VEN
сообщение 19.3.2017, 16:48
Сообщение #15
Стаж: 9 лет 2 месяца

Сообщений: 418
Благодарностей: 129
Полезность: 199

Такое надо не через таск делать, а через энтити.
И время среднее не секунду брать, а например 15.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: