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

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

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

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

AFK Manager [ReAPI]

, AFK Manager
Статус пользователя Xramer
сообщение 16.10.2018, 20:46
Сообщение #1


Стаж: 10 лет

Сообщений: 108
Благодарностей: 20
Полезность: 41

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");
}


Прикрепленное изображение

Прикрепленный файл  afk_manager.rar ( 2,55 килобайт ) Кол-во скачиваний: 704


Отредактировал: Xramer, - 5.10.2019, 13:40


КуКу

https://vk.com/cs_kykyepta
ip: 193.26.217.42:27449
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 6 раз
   Цитировать сообщение
Статус пользователя KOBRA71
сообщение 17.10.2018, 10:56
Сообщение #2
Стаж: 14 лет

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

Цитата
g_iMaxPlayers = get_maxplayers();

Начиная с версии Amx Mod X 1.8.3 имеется MaxClients

Цитата
if(user_has_weapon(id, CSW_C4))

if(get_entvar(id, var_weapons) & (1<<CSW_C4))

Цитата
#if defined AFK_BOMB_TRASFER_MSG
new playername[MAX_NAME_LENGTH];
get_entvar(i, var_netname, playername, charsmax(playername));
client_print_color(0, 0,"^1[^4Сервер^1] Бомба была перемещена к^4 %s^1, потому что ^4%s ^1находится ^3АФК.", playername, name);
#endif

Создание переменной в цикле.

Цитата
engclient_cmd(id, "drop", "weapon_c4");

rg_drop_item(id, "weapon_c4");

Цитата
#if defined AFK_FLAG_IMMUNITY
if(IsUserVip(i)) break;
#endif

Вип найден, цикл завершается.

Цитата
stock bool:xs_vec_equal(const Float:vec1[], const Float:vec2[])
return (vec1[0] == vec2[0]) && (vec1[1] == vec2[1]) && (vec1[2] == vec2[2]);

stock xs_vec_copy(const Float:vecIn[], Float:vecOut[])
{
vecOut[0] = vecIn[0];
vecOut[1] = vecIn[1];
vecOut[2] = vecIn[2];
}

#include <xs>

Цитата
client_print_color(0, 0, "^1[^4Сервер^1] Игрок ^3%s ^1был перемещен в зрители, так как был ^3AFK.", name);
client_print_color(id, 0, "^1[^4Сервер^1] Вы не проявляете активность! ^3Предупреждения^1: ^4%i/%i", g_iWarning[id], AFK_MAX_WARNING);
client_print_color(0, 0,"^1[^4Сервер^1] Бомба была перемещена к^4 %s^1, потому что ^4%s ^1находится ^3АФК.", playername, name);
client_print_color(0, 0, "^1[^4Сервер^1] Игрок ^4%s ^1выкинул бомбу, так как находится ^3AFK.", name);
client_print_color(0, 0, "^1[^4Сервер^1] Игрок^3 %s ^1удален за длительное нахождение в спектрах.", name);

enum
{
print_team_default = 0,
print_team_grey = -1,
print_team_red = -2,
print_team_blue = -3,
};

Цитата
Float:g_fOldAngles[33][3]

А как же MAX_CLIENTS+1

Цитата
new name[MAX_NAME_LENGTH];

new name[MAX_CLIENTS+1][MAX_NAME_LENGTH];

Цитата
if(i != id && is_user_alive(i) && (get_member(i, m_iTeam) == TEAM_TERRORIST)){

Если используешь биты, можно добавить проверку живого игрока.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя MrScooter
сообщение 17.10.2018, 11:36
Сообщение #3


Стаж: 9 лет 3 месяца
Город: Санкт-Петербург


Сообщений: 652
Благодарностей: 95
Полезность: 163

можно для 1.8.2 ????


WAR3FT СЕРВЕР CS 1.6
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Xramer
сообщение 17.10.2018, 11:58
Сообщение #4


Стаж: 10 лет

Сообщений: 108
Благодарностей: 20
Полезность: 41

Цитата(MrScooter @ 17.10.2018, 16:36) *
можно для 1.8.2 ????


Проверь, по идее должно работать.

Прикрепленный файл  afk_manager.sma ( 5,51 килобайт ) Кол-во скачиваний: 94


КуКу

https://vk.com/cs_kykyepta
ip: 193.26.217.42:27449
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Xramer
сообщение 17.10.2018, 12:22
Сообщение #5


Стаж: 10 лет

Сообщений: 108
Благодарностей: 20
Полезность: 41

Обновил первый пост.

* Добавлена поддержка amx 1.8.2.
* Добавил забытый таск на проверку спектров.

Перекомпилируйте плагин

Отредактировал: Xramer, - 17.10.2018, 15:10


КуКу

https://vk.com/cs_kykyepta
ip: 193.26.217.42:27449
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Xramer
сообщение 17.10.2018, 16:10
Сообщение #6


Стаж: 10 лет

Сообщений: 108
Благодарностей: 20
Полезность: 41

KOBRA71, #define MaxClients get_maxplayers() такая конструкция прокатит, если под 1.8.2 еще пилить? За замечания огромное спасибо, первый опыт)


КуКу

https://vk.com/cs_kykyepta
ip: 193.26.217.42:27449
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя fl0werD
сообщение 17.10.2018, 16:46
Сообщение #7
Стаж: 9 лет 2 месяца

Сообщений: 155
Благодарностей: 114
Полезность: 692

Цитата(Xramer @ 17.10.2018, 16:10) *
KOBRA71, #define MaxClients get_maxplayers() такая конструкция прокатит, если под 1.8.2 еще пилить? За замечания огромное спасибо, первый опыт)

делай так, не ошибешься.
#if AMXX_VERSION_NUM < 183
#define MaxClients get_maxplayers()
#endif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Xramer
сообщение 20.10.2018, 14:34
Сообщение #8


Стаж: 10 лет

Сообщений: 108
Благодарностей: 20
Полезность: 41

Обновил первый пост
* Исправлены ошибки
* Добавлен #define AFK_MSG_PREFIX


КуКу

https://vk.com/cs_kykyepta
ip: 193.26.217.42:27449
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sergei74
сообщение 23.10.2018, 19:28
Сообщение #9
Стаж: 8 лет 6 месяцев

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

если за комментировать //#define AFK_BOMB_TRASFER ошибка компиляции
Cкрытый текст
//AMXXPC compile.exe
// by the AMX Mod X Dev Team


//// afk_manager.sma
//
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(133) : warning 217: loose indentation
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(142) : warning 217: loose indentation
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(142) : error 029: invalid expression, assumed zero
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(142) : error 017: undefined symbol "SpectatorCheck"
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(151) : error 017: undefined symbol "AfkPunishment"
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(159) : error 029: invalid expression, assumed zero
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(159) : error 017: undefined symbol "AfkPunishment"
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(161) : error 017: undefined symbol "i"
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(161) : error 017: undefined symbol "i"
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(161) : error 088: number of arguments does not match definition
// C:\Users\SERGI\Desktop\kompelator 1.8.3\afk_manager.sma(161) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// 9 Errors.
// Could not locate output file compiled\afk_manager.amx (compile failed).
//
// Compilation Time: 0,55 sec
// ----------------------------------------

Press enter to exit ...//#define AFK_BOMB_TRASFER
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Xramer
сообщение 24.10.2018, 7:35
Сообщение #10


Стаж: 10 лет

Сообщений: 108
Благодарностей: 20
Полезность: 41

sergei74, обновил. проверь.
Прикрепленное изображение


КуКу

https://vk.com/cs_kykyepta
ip: 193.26.217.42:27449
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sergei74
сообщение 24.10.2018, 10:04
Сообщение #11
Стаж: 8 лет 6 месяцев

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

Цитата(Xramer @ 24.10.2018, 7:35) *
sergei74, обновил. проверь.
Прикрепленное изображение

Проверил все нормально спасибо
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Xramer
сообщение 5.10.2019, 13:48
Сообщение #12


Стаж: 10 лет

Сообщений: 108
Благодарностей: 20
Полезность: 41

Обновил первый пост

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

Перекомпилируйте плагин


КуКу

https://vk.com/cs_kykyepta
ip: 193.26.217.42:27449
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя dimamelnic
сообщение 27.11.2022, 18:38
Сообщение #13
Стаж: 11 лет

Сообщений: 1862
Благодарностей: 229
Полезность: 9

стоит данный плагин
// This file was auto-generated by AMX Mod X (v1.10.0.5406)
// Cvars for plugin "AFK Manager" by "Xramer" (afk_manager.amxx, v1.2)


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