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

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

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

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

AFK KICKER

Статус пользователя Dale
сообщение 11.6.2011, 22:03
Сообщение #1


Стаж: 14 лет

Сообщений: 237
Благодарностей: 96
Полезность: 46

Проблема не пашет AFK kicker
"aa"
/*
*
* Author: Cheesy Peteza
* Date: 18-Mar-2004
*
*
* Description: A generic AFK Kicker that should work with nearly all Half-Life mods.
* Tested with Natural-Selection v3.0 beta 3, Counter-Strike 1.6 and Day of Defeat.
*
* Cvars:
* mp_afktime 90 Time a player is allowed to be AFK in seconds before they are kicked. (minimum 30 sec)
* They time is only accumulated while they are alive.
* mp_afkminplayers 8 Minimum number of players required to be on the server before the plugin starts kicking.
*
*
* Requirements: AMXModX
*
*
*/

#include <amxmodx>
#include <colorchat>

#define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set mp_afktime to something silly.
#define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked.
#define CHECK_FREQ 5 // This is also the warning message frequency.

new g_oldangles[33][3]
new g_afktime[33]
new bool:g_spawned[33] = {true, ...}

public plugin_init() {
register_plugin("AFK Kicker","1.0b","Cheesy Peteza")
register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)

register_cvar("mp_afktime", "60") // Kick people AFK longer than this time
register_cvar("mp_afkminplayers", "2") // Only kick AFKs when there is atleast this many players on the server
set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
register_event("ResetHUD", "playerSpawned", "be")
}

public checkPlayers() {
for (new i = 1; i <= get_maxplayers(); i++) {
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned[i]) {
new newangle[3]
get_user_origin(i, newangle)

if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) {
g_afktime[i] += CHECK_FREQ
check_afktime(i)
} else {
g_oldangles[i][0] = newangle[0]
g_oldangles[i][1] = newangle[1]
g_oldangles[i][2] = newangle[2]
g_afktime[i] = 0
}
}
}
return PLUGIN_HANDLED
}

check_afktime(id) {
new numplayers = get_playersnum()
new minplayers = get_cvar_num("mp_afkminplayers")

if (numplayers >= minplayers) {
new maxafktime = get_cvar_num("mp_afktime")
if (maxafktime < MIN_AFK_TIME) {
log_amx("cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME)
maxafktime = MIN_AFK_TIME
set_cvar_num("mp_afktime", MIN_AFK_TIME)
}

if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
new timeleft = maxafktime - g_afktime[id]
ColorChat(0,GREEN,"^x01[^x04AFK Kicker^x01] You have ^x04%i^x01 seconds to move or you will be kicked for being AFK", timeleft)
} else if (g_afktime[id] > maxafktime) {
new name[32]
get_user_name(id, name, 31)
ColorChat(0,GREEN,"^x01[^x04AFK Kicker^x01] ^x03%s^x01 was kicked for being AFK longer than ^x04%i^x01 seconds", name, maxafktime)
log_amx("%s was kicked for being AFK longer than %i seconds", name, maxafktime)
server_cmd("kick #%d ^"You were kicked for being AFK longer than %i seconds^"", get_user_userid(id), maxafktime)
}
}
}

public client_connect(id) {
g_afktime[id] = 0
return PLUGIN_HANDLED
}

public client_putinserver(id) {
g_afktime[id] = 0
return PLUGIN_HANDLED
}

public playerSpawned(id) {
g_spawned[id] = false
new sid[1]
sid[0] = id
set_task(0.75, "delayedSpawn",_, sid, 1) // Give the player time to drop to the floor when spawning
return PLUGIN_HANDLED
}

public delayedSpawn(sid[]) {
get_user_origin(sid[0], g_oldangles[sid[0]])
g_spawned[sid[0]] = true
return PLUGIN_HANDLED
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Dale
сообщение 11.6.2011, 22:26
Сообщение #2


Стаж: 14 лет

Сообщений: 237
Благодарностей: 96
Полезность: 46

LAFA HELP!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 11.6.2011, 22:37
Сообщение #3


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

Прикрепленный файл  afkkicker.rar ( 8,11 килобайт ) Кол-во скачиваний: 105
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Dale
сообщение 11.6.2011, 22:49
Сообщение #4


Стаж: 14 лет

Сообщений: 237
Благодарностей: 96
Полезность: 46

А что ты исправил? можешь показать, мне же надо на чем то учится))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 11.6.2011, 22:57
Сообщение #5


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

1.Ввел в гугл : "AFK Kicker","1.0b","Cheesy Peteza"
2. Нашел рабочий плагин который ты еще не успел испортить...
3. Нашел то что ты пытался изменить в плагине, а конкретнее добавил
Код
#include <colorchat>

и изменил парочку строчек с выводом в чат.
4. Ну и исправил
Код
ColorChat(0,GREEN,..

на
Код
ColorChat(id,GREEN,..
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dale
сообщение 11.6.2011, 23:10
Сообщение #6


Стаж: 14 лет

Сообщений: 237
Благодарностей: 96
Полезность: 46

Цитата(LaFA @ 11.6.2011, 23:57) *
1.Ввел в гугл : "AFK Kicker","1.0b","Cheesy Peteza"
2. Нашел рабочий плагин который ты еще не успел испортить...
3. Нашел то что ты пытался изменить в плагине, а конкретнее добавил
Код
#include <colorchat>

и изменил парочку строчек с выводом в чат.
4. Ну и исправил
Код
ColorChat(0,GREEN,..

на
Код
ColorChat(id,GREEN,..

Только не работает приставка, и не пишет сообщение, что игрок omerta кикнут.

Будешь выручать?)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dale
сообщение 12.6.2011, 9:10
Сообщение #7


Стаж: 14 лет

Сообщений: 237
Благодарностей: 96
Полезность: 46

Актуально.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 12.6.2011, 10:06
Сообщение #8


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

Цитата(omerta @ 12.6.2011, 1:10) *
Только не работает приставка, и не пишет сообщение, что игрок omerta кикнут.
Будешь выручать?)

Код
            
new name[32]
get_user_name(id, name, 31)
ColorChat(0,GREEN,"^x01[^x04AFK Kicker^x01] ^x03%s^x01 was kicked for being AFK longer than ^x04%i^x01 seconds", name, maxafktime)

не может быть, все должно работать

Отредактировал: Rejiser, - 12.6.2011, 10:06
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя (sector)
сообщение 12.6.2011, 10:19
Сообщение #9


Стаж: 15 лет

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

Маленькая помарочка:
Цитата
new name[33]
get_user_name(id, name, 32)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Dale
сообщение 12.6.2011, 10:44
Сообщение #10


Стаж: 14 лет

Сообщений: 237
Благодарностей: 96
Полезность: 46

с приставкой разобрался, теперь не пишет что игрок тот то тот кикнут)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 12.6.2011, 10:56
Сообщение #11


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

Цитата((sector) @ 12.6.2011, 12:19) *
Маленькая помарочка:

http://www.amxmodx.org/funcwiki.php?go=func&id=165

Цитата
Notes:

index is a player index from 1 to 32.
Stores the name for a maximum of len characters. (common max name length is 31)


omerta,
Это
Код
ColorChat(id,GREEN,"^x01[^x04AFK Kicker^x01] ^x03%s^x01 was kicked for being AFK longer than ^x04%i^x01 seconds", name, maxafktime)

Замени на это:
Код
ColorChat(0,GREEN,"^x01[^x04AFK Kicker^x01] ^x03%s^x01 was kicked for being AFK longer than ^x04%i^x01 seconds", name, maxafktime)


Отредактировал: Rejiser, - 12.6.2011, 10:57
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 12.6.2011, 10:59
Сообщение #12


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

Цитата(Rejiser @ 12.6.2011, 11:56) *
http://www.amxmodx.org/funcwiki.php?go=func&id=165



omerta,
Это
Код
ColorChat(id,GREEN,"^x01[^x04AFK Kicker^x01] ^x03%s^x01 was kicked for being AFK longer than ^x04%i^x01 seconds", name, maxafktime)

Замени на это:
Код
ColorChat(0,GREEN,"^x01[^x04AFK Kicker^x01] ^x03%s^x01 was kicked for being AFK longer than ^x04%i^x01 seconds", name, maxafktime)

упс, чет я завтыкал))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dale
сообщение 12.6.2011, 11:09
Сообщение #13


Стаж: 14 лет

Сообщений: 237
Благодарностей: 96
Полезность: 46

Спасибо, кому надо вот исхоник
"sma."
CODE
#include <amxmodx>
#include <colorchat>

#define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set mp_afktime to something silly.
#define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked.
#define CHECK_FREQ 5 // This is also the warning message frequency.

new g_oldangles[33][3]
new g_afktime[33]
new bool:g_spawned[33] = {true, ...}

public plugin_init() {
register_plugin("AFK Kicker","1.0b","Cheesy Peteza")
register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)

register_cvar("mp_afktime", "60") // Kick people AFK longer than this time
register_cvar("mp_afkminplayers", "2") // Only kick AFKs when there is atleast this many players on the server
set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
register_event("ResetHUD", "playerSpawned", "be")
}

public checkPlayers() {
for (new i = 1; i <= get_maxplayers(); i++) {
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned[i]) {
new newangle[3]
get_user_origin(i, newangle)

if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) {
g_afktime[i] += CHECK_FREQ
check_afktime(i)
} else {
g_oldangles[i][0] = newangle[0]
g_oldangles[i][1] = newangle[1]
g_oldangles[i][2] = newangle[2]
g_afktime[i] = 0
}
}
}
return PLUGIN_HANDLED
}

check_afktime(id) {
new numplayers = get_playersnum()
new minplayers = get_cvar_num("mp_afkminplayers")

if (numplayers >= minplayers) {
new maxafktime = get_cvar_num("mp_afktime")
if (maxafktime < MIN_AFK_TIME) {
log_amx("cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME)
maxafktime = MIN_AFK_TIME
set_cvar_num("mp_afktime", MIN_AFK_TIME)
}

if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
new timeleft = maxafktime - g_afktime[id]
ColorChat(id,GREEN,"^1[^4AFK Kicker^1] You have ^3%i^1 seconds to move or you will be kicked for being AFK.", timeleft)
} else if (g_afktime[id] > maxafktime) {
new name[33]
get_user_name(id, name, 32)
ColorChat(0,GREEN,"^1[^4AFK Kicker^1] ^3%s^1 was kicked for being AFK longer than ^4%i^1 seconds", name, maxafktime)
log_amx("%s was kicked for being AFK longer than %i seconds", name, maxafktime)
server_cmd("kick #%d ^"You were kicked for being AFK longer than %i seconds^"", get_user_userid(id), maxafktime)
}
}
}

public client_connect(id) {
g_afktime[id] = 0
return PLUGIN_HANDLED
}

public client_putinserver(id) {
g_afktime[id] = 0
return PLUGIN_HANDLED
}

public playerSpawned(id) {
g_spawned[id] = false
new sid[1]
sid[0] = id
set_task(0.75, "delayedSpawn",_, sid, 1) // Give the player time to drop to the floor when spawning
return PLUGIN_HANDLED
}

public delayedSpawn(sid[]) {
get_user_origin(sid[0], g_oldangles[sid[0]])
g_spawned[sid[0]] = true
return PLUGIN_HANDLED
}
stock client_printcolor(const id, const input[], any:...)
{
new iCount = 1, iPlayers[32]
static szMsg[191]

vformat(szMsg, charsmax(szMsg), input, 3)
replace_all(szMsg, 190, "/g", "^4")
replace_all(szMsg, 190, "/y", "^1")
replace_all(szMsg, 190, "/ctr", "^1")
replace_all(szMsg, 190, "/w", "^0")

if(id) iPlayers[0] = id
else get_players(iPlayers, iCount, "ch")
for (new i = 0; i < iCount; i++)
{
if(is_user_connected(iPlayers[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
write_byte(iPlayers[i])
write_string(szMsg)
message_end()
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя (sector)
сообщение 12.6.2011, 11:20
Сообщение #14


Стаж: 15 лет

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

Цитата
Notes:

index is a player index from 1 to 32.
Stores the name for a maximum of len characters. (common max name length is 31)

Всё равно должно быть так:
Цитата
new name[33]
get_user_name(id, name, 32)

Если не ошибаюсь 32 отвечает за кол-во игроков!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 12.6.2011, 11:39
Сообщение #15


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

Цитата((sector) @ 12.6.2011, 13:20) *
Всё равно должно быть так:

Если не ошибаюсь 32 отвечает за кол-во игроков!

Как раз таки ошибаешься :biggrin:
32 - это кол-во символов в нике, т.е от нуля до 32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя (sector)
сообщение 12.6.2011, 11:49
Сообщение #16


Стаж: 15 лет

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

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