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

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

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

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

История благодарностей участнику Xramer ::: Спасибо сказали: 20
Дата поста: В теме: За сообщение: Спасибо сказали:
5.10.2019, 13:48 AFK Manager [ReAPI]
Обновил первый пост

* Требуется Amx Mod X 1.9.0
* Добавлен конфиг с кварами
* Все сообщения вынесены в Lang файл

Перекомпилируйте плагин
DexteR, Izmayl7
4.10.2019, 22:40 Serva4ok.ru
До глубины души расстраивается боярин, когда необходимо что-то посмотреть в консоли, а ее постоянно скипает в конец. Доколе терпеть нам это предстоит?
Affl, ipservers
16.10.2018, 20:46 AFK Manager [ReAPI]
AFK Manager

Описание плагина: Очередной простой плагин для кика афк. Добавлен только необходимый функционал.

Требования:
• Reapi
• AmxModX 1.9.0

Конфиг создается автоматически: configs\plugins\afk_manager.cfg

Конфиг
Код:

// Time to check
// -
// Default: "10.0"
afk_time_check "10.0"

// The maximum number of warnings after which the player will be kicked
// -
// Default: "3"
afk_max_warning "3"

// The number of players at which it will kick, and not translate for spectators.
// -
// Default: "32"
afk_num_check_spec "32"

// Transfer bomb to allies.
// -
// Default: "1"
afk_transfer_bomb "1"

// Enable notification in the chat about the player transfer for spectators.
// -
// Default: "1"
afk_notice_spec "1"

// Enable notification in chat about player kick.
// -
// Default: "1"
afk_notice_kick "1"

// Flag of immunity from plugin actions
// -
// Default: "a"
afk_immunity_flag "a"

// Time to сheck spectators.
// -
// Default: "60.0"
afk_time_check_spec "60.0"

// Enable notification in chat about transfer bomb.
// -
// Default: "1"
afk_notice_transfer "1"



Код
Код:

#include <amxmodx>
#include <reapi>
#include <xs>

#define PLUGIN "AFK Manager"
#define VERSION "1.2"
#define AUTHOR "Xramer"

#define TASK_AFK_CHECK 139734
#define BIT_VALID(%1,%2) (%1 & (1 << (%2 & 31)))
#define BIT_ADD(%1,%2) %1 |= (1 << (%2 & 31))
#define BIT_SUB(%1,%2) %1 &= ~(1 << (%2 & 31))

new const g_szConfigName[] = "afk_manager";

new g_szFlag[32], Float:g_iTimeCheck, g_iMaxWarning, g_iMaxSpect, Float:g_iTimeCheckSpect
new g_iTrnsferBomb, g_iNoticeSpec, g_iNoticeKick, g_iNoticeTransfer
new Float:g_fOldOrigin[MAX_CLIENTS+1][3], Float:g_fOldAngles[MAX_CLIENTS+1][3];
new g_iBitClientValid, g_iWarning[MAX_CLIENTS+1];
new g_iMaxPlayers;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary("afk_manager.txt");

bind_pcvar_string(create_cvar(
"afk_immunity_flag",
"a", .description = "Flag of immunity from plugin actions"),
g_szFlag,
charsmax(g_szFlag))

bind_pcvar_float(create_cvar(
"afk_time_check",
"10.0",
.description = "Time to check"),
g_iTimeCheck)

bind_pcvar_num(create_cvar(
"afk_max_warning",
"3",
.description = "The maximum number of warnings after which the player will be kicked"),
g_iMaxWarning)

bind_pcvar_num(create_cvar(
"afk_num_check_spec",
"32",
.description = "The number of players at which it will kick, and not translate for spectators."),
g_iMaxSpect)

bind_pcvar_float(create_cvar(
"afk_time_check_spec",
"60.0",
.description = " Time to сheck spectators."),
g_iTimeCheckSpect)

bind_pcvar_num(create_cvar(
"afk_transfer_bomb",
"1",
.description = "Transfer bomb to allies."),
g_iTrnsferBomb)

bind_pcvar_num(create_cvar(
"afk_notice_spec",
"1",
.description = "Enable notification in the chat about the player transfer for spectators."),
g_iNoticeSpec)

bind_pcvar_num(create_cvar(
"afk_notice_kick",
"1",
.description = "Enable notification in chat about player kick."),
g_iNoticeKick)

bind_pcvar_num(create_cvar(
"afk_notice_transfer",
"1",
.description = "Enable notification in chat about transfer bomb."),
g_iNoticeTransfer)

AutoExecConfig(true, g_szConfigName)

RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true);
set_task(g_iTimeCheckSpect, "SpectatorCheck", .flags = "b");
g_iMaxPlayers = MaxClients;
}

public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return;
BIT_ADD(g_iBitClientValid, id);
}

public client_disconnected(id)
{
if(task_exists(id+TASK_AFK_CHECK)) remove_task(id+TASK_AFK_CHECK);
BIT_SUB(g_iBitClientValid, id);
}

public CBasePlayer_Killed(id) remove_task(id+TASK_AFK_CHECK);

public CBasePlayer_Spawn(const id)
{
if(!is_user_alive(id)) return;

g_iWarning[id] = 0;

get_entvar(id, var_origin, g_fOldOrigin[id]);
get_entvar(id, var_angles, g_fOldAngles[id]);

if(task_exists(id+TASK_AFK_CHECK)) remove_task(id+TASK_AFK_CHECK);
set_task(g_iTimeCheck, "AfkCheck", id+TASK_AFK_CHECK, _, _, "b");
}

public AfkCheck(id)
{
id -= TASK_AFK_CHECK;
new Float:fNewOrigin[3], Float:fNewAngles[3];

get_entvar(id, var_origin, fNewOrigin);
get_entvar(id, var_angles, fNewAngles);

if(xs_vec_equal(g_fOldOrigin[id], fNewOrigin) && xs_vec_equal(g_fOldAngles[id], fNewAngles))
{

if(++g_iWarning[id] >= g_iMaxWarning)
{
user_kill(id,1)
rg_join_team(id, TEAM_SPECTATOR);
set_member(id, m_iTeam, TEAM_SPECTATOR);
if(g_iNoticeSpec){
client_print_color(0, print_team_red, "%l %l", "AFK_PREFIX", "AFK_ALL_TRANSFER_SPECTATOR", id);
}

}
else
{
client_print_color(id, print_team_red, "%l %l", "AFK_PREFIX", "AFK_ID_WARNING", g_iWarning[id], g_iMaxWarning);
}
if(get_entvar(id, var_weapons) & (1<<CSW_C4))
{
if(g_iTrnsferBomb){
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(i != id && is_user_alive(i) && (get_member(i, m_iTeam) == TEAM_TERRORIST)){
rg_transfer_c4(id,i)
if(g_iNoticeTransfer){
client_print_color(0, print_team_red,"%l %l", "AFK_PREFIX", "AFK_BOMB_TRANSFER", id, i);
}
break;
}
}
}
else
{
rg_drop_item(id, "weapon_c4");
if(g_iNoticeTransfer){
client_print_color(0, print_team_red, "%l %l", "AFK_PREFIX", "AFK_BOMB_DROP", id);
}
}
}

}
else
{
if(g_iWarning[id]) g_iWarning[id] = 0;
xs_vec_copy(fNewOrigin, g_fOldOrigin[id]);
xs_vec_copy(fNewAngles, g_fOldAngles[id]);
}
}

public SpectatorCheck()
{
if(get_playersnum() < g_iMaxSpect) return;
for(new i=1; i <= g_iMaxPlayers; i++){
if(BIT_VALID(g_iBitClientValid, i)){
if(get_user_flags(i) & read_flags(g_szFlag)) continue;

if(get_member(i, m_iTeam) == TEAM_SPECTATOR){
AfkPunishment(i);
break;
}

}
}
}

public AfkPunishment(i)
{
if(g_iNoticeKick){
client_print_color(0, print_team_red, "%l %l", "AFK_PREFIX", "AFK_ALL_KICK_SPECTATOR", i);
}
server_cmd("kick #%d ^"%l^"", get_user_userid(i), "AFK_ID_KICK_SPECTATOR");
}


[attachment=48902:20181020192701_1.jpg]

[attachment=50913:afk_manager.rar]
cpt, DexteR, Izmayl7, MrScooter, Nebo, TheArtemMaps
14.3.2017, 13:56 [Продажа] CsImperia.ru | PlayOneGame
не актуально. продано.
EvilSMS
4.2.2017, 10:54 Платная графика от VR.prod
Отличный дизайнер. Очень быстро и качественно всё сделал, советую всем good.gif
vRpRoD
27.7.2016, 18:42 Забанить игрока
google.bsk, Сам не пробовал, но вполне возможно. Постучитесь в личку хулигану и спросите, раз он делал подобное.
google.bsk
27.7.2016, 18:39 Забанить игрока
google.bsk, многие думаю уже и забыли про ваш сервер, а бан висит до сих пор, не вижу смысла в этом. Я лично ограничил время бана. античит - сутки, админы - максимум месяц. Если есть необходимость, некоторым уникумам продлеваю.
google.bsk
27.7.2016, 18:34 Забанить игрока
google.bsk, лучше почисти баны и поставь новую систему.
google.bsk
27.7.2016, 18:32 Забанить игрока
google.bsk, не вижу смысла хранить все баны, если не хотите видеть некоторых игроков на сервере, можно перенести их в ручную на крайняк. мб и так прокатит, без переноса.
google.bsk
27.7.2016, 18:26 Забанить игрока
google.bsk, не смог удержаться, ну поставь уж FB + OD beta и не будет проблем, зачем усложнять все?
google.bsk