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

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

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

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

8 страниц V  « 7 8

AFK Control. Измененный от Freedo.m

, intercs заказчик
Статус пользователя ex3m777
сообщение 19.6.2014, 15:04
Сообщение #141


Стаж: 13 лет
Город: Москва

Сообщений: 2037
Благодарностей: 1135
Полезность: 968

Меценат Меценат

админов кикает обычных игроков нет.. хз чё делать..
пока пользуюсь этим 100% рабочим вариантом

Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#pragma tabsize 0

#define PLUGIN "AntiAfk"
#define AUTHOR "pic"
#define VERSION "1.3"

#define AFK_IMMUNITY ADMIN_RESERVATION // Иммунитет у тех, у кого ADMIN_RESERVATION (Можно поменять на свой)
#define MAXANG 15 // Погрешность угла обзора (При атаке afk, у него он может изменится)
#define MAXPOS 15 // Погрешность положения игрока на карте (При атаке afk, у него оно может изменится)
#define MAXFLY 1.3 // Время приземления на спавне (Можно поставить меньше, если нет карт 1hp, 35hp)
#define TASKID 142531
#define PUNISH_SPECTATOR 1
#define PUNISH_AFK_SPECTATOR 2
#define PUNISH_AFK_KICK 3


new Float:g_oldang[33][3], g_oldpos[33][3], g_afktime[33], bool:player_spawned[33]
new maxplayers, afkmaxplayers, afkbombdrop_time, warning_time, maxafk_time, afkbombtransfer, aimmunity, kick, check_frequency, bool:freezetime

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

check_frequency = register_cvar("afk_frequency", "1.0") // Время между проверками на простой в секундах
maxafk_time = register_cvar("afk_time", "40") // Максимальное время простоя
afkbombdrop_time = register_cvar("afk_bomb_drop_time", "15") // Время простоя, после которого у игрока отнимет бомбу
afkbombtransfer = register_cvar("afk_bomb_transfer", "1") // Передавать бомбу другому игроку, или просто выкинуть на землю
aimmunity = register_cvar("afk_immunity", "1") // Иммунитет от кика
kick = register_cvar("afk_kick", "0") // Кикать сразу простаивающего, не перенося в зрители
warning_time = register_cvar("afk_warning_time", "15") // Время простоя, при котором покажет таймер простаивающему игроку

maxplayers = get_maxplayers()
afkmaxplayers = maxplayers - get_cvar_num("amx_reservation")

RegisterHam(Ham_Spawn, "player", "player_spawn")
register_logevent("round_start_event", 2, "1=Round_Start")
if(!get_pcvar_num(afkbombdrop_time) || get_pcvar_num(afkbombdrop_time) >= get_pcvar_num(maxafk_time))
set_pcvar_num(afkbombdrop_time, get_pcvar_num(maxafk_time) - 1)
if(get_cvar_num("mp_freezetime") > 0)
register_event("HLTV", "event_new_round", "a", "1=0", "2=0")

set_task(get_pcvar_float(check_frequency), "checkPlayers", TASKID, _, _, "b")
}

public round_start_event()
freezetime = false

public event_new_round()
freezetime = true

public player_spawn(id)
{
if(task_exists(id))
remove_task(id)

player_spawned[id] = false
if(is_user_bot(id) || is_user_hltv(id))
return

set_task(MAXFLY, "playerSpawned", id)
}

public playerSpawned(id)
{
if(!is_user_connected(id) || !is_user_alive(id))
return

pev(id, pev_v_angle, g_oldang[id])
get_user_origin(id, g_oldpos[id])
player_spawned[id] = true

}

public checkPlayers()
{
static Float:newang[3]
static newpos[3]
static i, players[32], num, player
get_players(players, num, "ach")

if(freezetime || num < 2)
return

for(i=0; i<num; i++)
{
player = players[i]
if(is_user_connected(player) && player_spawned[player])
{
pev(player, pev_v_angle, newang)
get_user_origin(player, newpos)

if(abs(floatround(newang[0])-floatround(g_oldang[player][0]))>MAXANG
|| abs(floatround(newang[1])-floatround(g_oldang[player][1]))>MAXANG)
{
g_oldang[player][0] = newang[0]
g_oldang[player][1] = newang[1]
g_afktime[player] = 0
continue
}
if(abs(newpos[0]-g_oldpos[player][0])>MAXPOS
|| abs(newpos[1]-g_oldpos[player][1])>MAXPOS
|| newpos[2] != g_oldpos[player][2])
{
g_oldpos[player][0] = newpos[0]
g_oldpos[player][1] = newpos[1]
g_oldpos[player][2] = newpos[2]
g_afktime[player] = 0
continue
}
g_afktime[player] += get_pcvar_num(check_frequency)
check_afktime(player)
}
}
}

public check_afktime(id)
{
new afktimetmp = get_pcvar_num(maxafk_time), afktimeleft, kickorspect
static punishname[40]
afktimeleft = afktimetmp - g_afktime[id]

if(get_pcvar_num(afkbombdrop_time) == g_afktime[id])
transfer_bomb(id)

if (afktimeleft <= get_pcvar_num(warning_time))
{
if((get_pcvar_num(kick) || get_playersnum() >= afkmaxplayers ) && checkimmunity(id))
{
kickorspect = 1
punishname = "кикнуты"
}
else
{
kickorspect = 0
punishname = "перенесены в зрители"
}

if(afktimeleft > 0)
{
set_hudmessage(0, 255, 0, -1.0, -0.9, 0, get_pcvar_float(check_frequency), get_pcvar_float(check_frequency)-0.1, 0.0, 0.0, -1)
show_hudmessage(id, "Вы будете %s за простой, через %d сек.", punishname, afktimeleft)
}
}

if(is_user_connected(id) && g_afktime[id] >= afktimetmp)
{
if(kickorspect == 1)
punish_player(id, PUNISH_AFK_KICK)
else
{
punish_player(id, PUNISH_AFK_SPECTATOR)
player_spawned[id] = false
g_afktime[id] = 0
}
}
}

public transfer_bomb(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return

if(!is_user_connected(id) || !is_user_alive(id) || !(pev(id, pev_weapons) & (1 << CSW_C4)))
return

new i, players[32], num, player
get_players(players, num, "ache", "TERRORIST")
if(num < 2)
return

if(get_pcvar_num(afkbombtransfer) == 0)
{
engclient_cmd(id, "drop", "weapon_c4")
return
}

new g_carrier[3], g_recipient[3], recipient, distance, mindistance = 999999
get_user_origin(id, g_carrier)
for (i = 0; i < num; i++)
{
player = players[i]
if(!is_user_connected(player) || player == id)
continue

get_user_origin(player, g_recipient)
distance = get_distance(g_carrier, g_recipient)
if(distance < mindistance)
{
mindistance = distance
recipient = player
}
}
if(!recipient)
return

engclient_cmd(id, "drop", "weapon_c4")
new c4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4")
if(pev_valid(c4))
{
new backpack = pev(c4, pev_owner)
if(backpack > maxplayers)
{
set_pev(backpack, pev_flags, pev(backpack, pev_flags) | FL_ONGROUND)
dllfunc(DLLFunc_Touch, backpack, recipient)
}
}
}

public client_putinserver(id)
{
player_spawned[id] = false
g_afktime[id] = 0

if(task_exists(id + 100))
remove_task(id + 100)

if(is_user_bot(id) || is_user_hltv(id))
return

set_task(get_pcvar_float(maxafk_time),"check_unassigned", id + 100)

if(get_playersnum() < afkmaxplayers)
return

static i, players[32], num, player
get_players(players, num, "ch")

for(i=0; i<num; i++)
{
player = players[i]
if(is_user_connected(player) && id != player && cs_get_user_team(player) == CS_TEAM_SPECTATOR && checkimmunity(player))
{
punish_player(player, PUNISH_SPECTATOR)
break
}
}
}

public check_unassigned(id)
{
new player = id - 100
if(is_user_connected(player) && cs_get_user_team(player) == CS_TEAM_UNASSIGNED)
client_cmd(player, "jointeam 6")
}

public checkimmunity(id)
{
if(get_pcvar_num(aimmunity)==0)
return true
else
if(get_user_flags(id) & AFK_IMMUNITY)
return false

return true
}

public plugin_end()
remove_task(TASKID)

stock punish_player(id, punishtype)
{
if(!is_user_connected(id))
return

static name[32]
get_user_name(id, name, 31)

switch(punishtype)
{
case PUNISH_SPECTATOR:
{
server_cmd("kick #%d ^"Вы были кикнуты из зрителей, т.к. сервер почти заполнен^"", get_user_userid(id))
}
case PUNISH_AFK_KICK:
{
server_cmd("kick #%d ^"Вы были кикнуты за простой^"", get_user_userid(id))
}
case PUNISH_AFK_SPECTATOR:
{
if (is_user_alive(id))
{
user_kill(id, 1)
cs_set_user_deaths(id, (cs_get_user_deaths(id)-1))
}
cs_set_user_team(id, CS_TEAM_SPECTATOR)
}
}
}


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 25.6.2014, 10:15
Сообщение #142
Стаж: 12 лет

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

grishka444,
Этот пробовал?
https://c-s.net.ua/forum/index.php?showtopi...st&p=613886
в первом посту кривой:)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   + Цитировать сообщение
staff2517
сообщение 23.8.2014, 4:07
Сообщение #143
Стаж: 12 лет

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

у меня почему-то не работает плагин, хотя в amx_plugins
Afk Control 0.4.1 Freedo.m | neygo afk_control.amx running
Как можно решить проблему ??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TJhack
сообщение 23.8.2014, 8:36
Сообщение #144
Стаж: 12 лет

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

staff2517,
mp_autokick 0
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
staff2517
сообщение 23.8.2014, 9:50
Сообщение #145
Стаж: 12 лет

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

Цитата(TJhack @ 23.8.2014, 8:36) *
staff2517,
mp_autokick 0

у меня так и стоит
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
HOUSE
сообщение 12.9.2016, 2:45
Сообщение #146
Стаж: 9 лет 8 месяцев
Город: Обухов

Сообщений: 53
Благодарностей: 16
Полезность: 52

Выставляю Код:
#define ACCESS_LEVEL_IMMUNITY ADMIN_LEVEL_H
админа продолжает kick в спектрах, кто-нибудь пытался исправить это? Просто бывает не удобно-когда за игроком надо следить подольше, а в неловкий момент тебя выкидывает с сервера... плагин очень хорош, не хочется искать замену ему...
Код:
mp_autokick 0 прописано


Отредактировал: HOUSE, - 12.9.2016, 2:49
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
podbot
сообщение 12.9.2016, 2:57
Сообщение #147
Стаж: 11 лет

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

HOUSE,
#define ACCESS_LEVEL_IMMUNITY (ADMIN_MENU|ADMIN_LEVEL_H)
glare.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
8 страниц V  « 7 8
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: