- Регистрация
- 14 Июн 2017
- Сообщения
- 606
- Симпатии
- 126
Уважаемые гуру скриптинга нужна маленькая помощь по переделке плагина от Neugomon , а именно хочу в этот плагин
добавить такие сообщения когда игрок зашол на сервер
#include <amxmodx>
#define ACCESS_LEVEL_IMMUNITY (ADMIN_BAN|ADMIN_RCON) // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING 150 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX 30 // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS 30 // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK 2 // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK 30.0 // Интервал между проверками, чем меньше значение, тем больше нагрузка на сервер.
#define is_immunity(%0) ((get_user_flags(%0) & ACCESS_LEVEL_IMMUNITY) || is_user_bot(%0) || is_user_hltv(%0))
#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) %1 |= (1 << (%2 & 31))
#define clr_bit(%1,%2) %1 &= ~(1 << (%2 & 31))
new g_iWarning[33], g_iCountCheck[33], g_iLastPing[33], g_iBitValid;
public plugin_init()
{
register_plugin("Ping Control", "1.4", "neygomon");
set_task(INTERVAL_CHECK, "PingCheck", .flags = "b");
}
public client_putinserver(id)
{
if(is_immunity(id)) return;
set_bit(g_iBitValid, id);
g_iWarning[id] = g_iCountCheck[id] = 0;
}
public client_disconnect(id)
clr_bit(g_iBitValid, id);
public PingCheck()
{
static i, iPing, iLoss, players[32], pcount;
get_players(players, pcount, "ch")
for(i=0; i < pcount; i++)
{
if(!get_bit(g_iBitValid, players)) continue;
if(++g_iCountCheck[players] < MAX_WARNING_CHECK + 1)
{
get_user_ping(players, iPing, iLoss)
if(iPing >= MAX_ALLOWED_PING || iLoss > MAX_ALLOWED_LOSS || abs(iPing - g_iLastPing[players]) > MAX_FLUX)
{
if(++g_iWarning[players] >= MAX_WARNING_CHECK)
{
static name[32]; get_user_name(players, name, charsmax(name));
ChatColor("^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
server_cmd("kick #%d ^"Ваш пинг нестабилен...! Нормализируйте пинг и заходите играть^"", get_user_userid(players));
}
else g_iCountCheck[players]--;
}
else if(g_iWarning[players]) g_iWarning[players]--;
g_iLastPing[players] = iPing;
}
}
}
stock ChatColor(const szMessage[], any:...)
{
static pnum, players[32], szMsg[190], IdMsg;
vformat(szMsg, charsmax(szMsg), szMessage, 2);
if(!IdMsg) IdMsg = get_user_msgid("SayText");
get_players(players, pnum, "ch");
for(new i; i < pnum; i++)
{
message_begin(MSG_ONE, IdMsg, .player = players);
write_byte(players);
write_string(szMsg);
message_end();
}
}
#define ACCESS_LEVEL_IMMUNITY (ADMIN_BAN|ADMIN_RCON) // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING 150 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX 30 // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS 30 // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK 2 // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK 30.0 // Интервал между проверками, чем меньше значение, тем больше нагрузка на сервер.
#define is_immunity(%0) ((get_user_flags(%0) & ACCESS_LEVEL_IMMUNITY) || is_user_bot(%0) || is_user_hltv(%0))
#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) %1 |= (1 << (%2 & 31))
#define clr_bit(%1,%2) %1 &= ~(1 << (%2 & 31))
new g_iWarning[33], g_iCountCheck[33], g_iLastPing[33], g_iBitValid;
public plugin_init()
{
register_plugin("Ping Control", "1.4", "neygomon");
set_task(INTERVAL_CHECK, "PingCheck", .flags = "b");
}
public client_putinserver(id)
{
if(is_immunity(id)) return;
set_bit(g_iBitValid, id);
g_iWarning[id] = g_iCountCheck[id] = 0;
}
public client_disconnect(id)
clr_bit(g_iBitValid, id);
public PingCheck()
{
static i, iPing, iLoss, players[32], pcount;
get_players(players, pcount, "ch")
for(i=0; i < pcount; i++)
{
if(!get_bit(g_iBitValid, players)) continue;
if(++g_iCountCheck[players] < MAX_WARNING_CHECK + 1)
{
get_user_ping(players, iPing, iLoss)
if(iPing >= MAX_ALLOWED_PING || iLoss > MAX_ALLOWED_LOSS || abs(iPing - g_iLastPing[players]) > MAX_FLUX)
{
if(++g_iWarning[players] >= MAX_WARNING_CHECK)
{
static name[32]; get_user_name(players, name, charsmax(name));
ChatColor("^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
server_cmd("kick #%d ^"Ваш пинг нестабилен...! Нормализируйте пинг и заходите играть^"", get_user_userid(players));
}
else g_iCountCheck[players]--;
}
else if(g_iWarning[players]) g_iWarning[players]--;
g_iLastPing[players] = iPing;
}
}
}
stock ChatColor(const szMessage[], any:...)
{
static pnum, players[32], szMsg[190], IdMsg;
vformat(szMsg, charsmax(szMsg), szMessage, 2);
if(!IdMsg) IdMsg = get_user_msgid("SayText");
get_players(players, pnum, "ch");
for(new i; i < pnum; i++)
{
message_begin(MSG_ONE, IdMsg, .player = players);
write_byte(players);
write_string(szMsg);
message_end();
}
}
* Игроки с пингом выше (тут значения) будут и кикнуты с сервера!