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

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

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

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

8 страниц V  « 5 6 7 »

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

, intercs заказчик
Статус пользователя Sanlerus
сообщение 24.5.2014, 15:05
Сообщение #101


Стаж: 12 лет

Сообщений: 132
Благодарностей: 70
Полезность: 34

Всё ясно, клинический случай. Надеюсь это хоть как-то тебе поможет: http://amxxmodx.ru/lessons-on-pawn/414-uro...peremennyh.html
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя gudaus
сообщение 24.5.2014, 15:14
Сообщение #102


Стаж: 14 лет

Сообщений: 1571
Благодарностей: 1211
Полезность: 741

Основная оптимизация - проверка клиента не каждые N секунд, а первые несколько минут. Далее оставляем в покое. После месяца использования этого плагина отказался. Потому что обнаружилось, что у клиента может внезапно вырасти пинг после 5-10 минут игры, далее он мешает играть всем, а плагин оставил пингера в покое.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 24.5.2014, 15:37
Сообщение #103
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

Код
public SpectatorCheck()
{
    if(get_playersnum() < MIN_PLAYERS_CHECK) return;
    static i, iFlags;
    for(i=1; i < g_iMaxPlayers; i++)
    {
        if(BIT_VALID(g_iBitClientValid, i))
        {
            if(iFlags || (iFlags = get_user_flags(i) & ACCESS_LEVEL_IMMUNITY))
            {
                switch(_:cs_get_user_team(i))
                {
                    case 3: if(++g_count[i] >= MAX_SPECT_CHECK_PL) AfkPunishment(i);
                }    
            }
        }
    }
}


Код
for(i=1; i < g_iMaxPlayers; i++)


>>>

Код
for(i=1; i <= g_iMaxPlayers; i++)


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

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

iLLuSioN,
не критично ;)
все равно за пределы цикла не вылезет

Sanlerus,
для таких как ты там написано:
Цитата
оператор static не пересоздает переменную, а продолжает работать с ране созданной.

Цитата
Первый вызов:
cmd_static
i=0
i+1 i=1
Второй вызов:
cmd_static
i=1
i+1 i=2

Если твой 17-ти летний мозг не может этого понять, то извини.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 24.5.2014, 17:51
Сообщение #105


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

trollface,
Вы реально не понимаете как работает написанный вами код? Флаг проверяется только у первого живого игрока, т.к. iFlags отличен от нуля, то вторая часть условия (iFlags = get_user_flags(i) & ACCESS_LEVEL_IMMUNITY) больше никогда не выполнится для следующих игроков. На выходе получаем либо до свитча доходят все игроки, либо никто.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
trollface
сообщение 24.5.2014, 17:59
Сообщение #106
Стаж: 12 лет

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

Mistrick94,
ок. буду знать...


ps.gif Администрация, снесите тему.
Зачем юзерам давать УГ плагины
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   + Цитировать сообщение
Статус пользователя csnet
сообщение 24.5.2014, 18:49
Сообщение #107
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

поддерживаю


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 24.5.2014, 20:24
Сообщение #108
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

Цитата(trollface @ 24.5.2014, 18:38) *
iLLuSioN,
не критично ;)
все равно за пределы цикла не вылезет

Не критично, что игрока с ID 32 будет игнорировать?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 24.5.2014, 21:21
Сообщение #109
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

может у него там hltv висит


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 24.5.2014, 23:27
Сообщение #110
Стаж: 12 лет

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

iLLuSioN,
< - меньше
<= - меньше или равно...
или я не прав?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя Surf
сообщение 24.5.2014, 23:33
Сообщение #111


Стаж: 14 лет

Сообщений: 1089
Благодарностей: 501
Полезность: 583

Цитата(trollface @ 25.5.2014, 3:27) *
iLLuSioN,
< - меньше
<= - меньше или равно...
или я не прав?

MaxPlayers = 20

for (i = 1; i < MaxPlayers; i++)
код будет выполнятся пока i меньше 20, в итоге двадцатый игрок не проверится (20 < 20 это false, выходим из цикла)

for (i = 1; i <= MaxPlayers; i++)
20 <= 20 это true, выполняем тело цикла
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 24.5.2014, 23:36
Сообщение #112
Стаж: 12 лет

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

Surf,
ну я так и размышлял.

а почему говорят менять <= на < ? ведь id последнего не будет проверяться =\

Отредактировал: trollface, - 24.5.2014, 23:36
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя csnet
сообщение 25.5.2014, 1:02
Сообщение #113
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

меньше надо верить на слово, и проверять самому
условие - цикл по 32 игрокам

тебе надо было сделать ( если по твоему

< 33 ( тогда цикл бы дошел до 32 игрока )


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 25.5.2014, 7:55
Сообщение #114
Стаж: 12 лет

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

csnet,
ну это все правильно, но ведь можно сделать цикл по 32 игрокам но в условии не < а <=
или я опять ничего не понял? xD
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя Sanlerus
сообщение 25.5.2014, 8:03
Сообщение #115


Стаж: 12 лет

Сообщений: 132
Благодарностей: 70
Полезность: 34

Господи, иди учить хотя бы основы, ты совершенно же не соображаешь, сразу видно диплом купил pardon.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 25.5.2014, 8:18
Сообщение #116
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

Цитата(trollface @ 25.5.2014, 0:36) *
Surf,
а почему говорят менять <= на < ?

Я написал сменить < на <=. Перечитай пост


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
trollface
сообщение 25.5.2014, 8:21
Сообщение #117
Стаж: 12 лет

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

iLLuSioN,
слепой :D
Извините
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя xoymiii
сообщение 25.5.2014, 10:33
Сообщение #118


Стаж: 13 лет

Сообщений: 769
Благодарностей: 244
Полезность: 567

вчера тестил, стоит 20 секунд до первого предупреждения афк из двух. Но первое предупреждение даётся через 30 секунд, а второе через 20 как и должно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя firante
сообщение 25.5.2014, 13:48
Сообщение #119


Стаж: 12 лет

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

trollface,
Зашёл админом имеет флаг доступа на BAN но всё равно кикает с спектаторах!
sma
Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif

#define ACCESS_LEVEL_IMMUNITY (ADMIN_BAN|ADMIN_LEVEL_H) // Уровень доступа позволяющий беспрепятственно сидеть в зрителях
#define TIME_AFK_CHECK 15.0 // Интервал между проверками игроков, чем меньше значение, тем больше нагрузка на сервер.
#define MAX_AFK_WARNING 3 // Количество предупреждений после которых последует наказание.
#define TIME_SPECT_CHECK 60.0 // Интервал между проверками зрителей, чем меньше значение, тем больше нагрузка на сервер.
#define MAX_SPECT_CHECK_PL 2 // Количество проверок игрока на нахождение в зрителях, после которых его кикнет
#define MIN_PLAYERS_CHECK 1 // Минимальное количество игроков, когда включается функция проверки зрителей.
#define BOMB_TRANSFER // Передавать ли бомбу игрокам, если игрок AFK. [Закомментируйте, если хотите, чтобы бомба просто выкидывалась]
// !!! Включение прибавит чутка нагрузки !!!
#pragma semicolon 1

#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 Float:g_fOldOrigin[33][3], Float:g_fOldAngles[33][3];
new g_iBitClientValid, g_iWarning[33];
new g_iMaxPlayers;
new g_count[33];
new name[32];

public plugin_init()
{
register_plugin("Afk Control", "0.4.1", "Freedo.m | neygomon");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1);
RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Post", 1);
g_iMaxPlayers = get_maxplayers();
set_task(TIME_SPECT_CHECK, "SpectatorCheck", .flags = "b");
}

public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return;
BIT_ADD(g_iBitClientValid, id);
g_count[id] = 0;
}

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

public Ham_PlayerSpawn_Post(id)
{
if(!is_user_alive(id)) return;
g_iWarning[id] = 0;

pev(id, pev_origin, g_fOldOrigin[id]);
pev(id, pev_angles, g_fOldAngles[id]);

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

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

public AfkCheck(id)
{
id -= TASK_AFK_CHECK;
new Float:fNewOrigin[3], Float:fNewAngles[3];
pev(id, pev_origin, fNewOrigin);
pev(id, pev_angles, fNewAngles);
if(xs_vec_equal(g_fOldOrigin[id], fNewOrigin) && xs_vec_equal(g_fOldAngles[id], fNewAngles))
{
get_user_name(id, name, charsmax(name));

if(++g_iWarning[id] >= MAX_AFK_WARNING)
{
user_kill(id, 1);
engclient_cmd(id, "jointeam", "6");
client_cmd(id, "spk events/friend_died");
client_print_color(0, 0, "^4[^3ProStrike^4] Игрок ^3%s ^4был перемещен в зрители, так как был ^3AFK.", name);
}
else client_cmd(id, "spk events/tutor_msg");
client_print_color(id, 0, "^4[^3ProStrike^4] Вы не проявляете активность! Предупреждения: ^3%i/%i", g_iWarning[id], MAX_AFK_WARNING);

if(user_has_weapon(id, CSW_C4))
{
engclient_cmd(id, "drop", "weapon_c4");
client_print_color(0, 0, "^4[^3ProStrike^4] Игрок ^3%s ^4выкинул бомбу, так как находится ^3AFK.", name);
#if defined BOMB_TRANSFER
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(i != id && is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)
{
new iWeaponC4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4");
if(pev_valid(iWeaponC4))
{
new iOwner = pev(iWeaponC4, pev_owner);
if(iOwner > g_iMaxPlayers)
{
set_pev(iOwner, pev_flags, pev(iOwner, pev_flags) | FL_ONGROUND);
dllfunc(DLLFunc_Touch, iOwner, i);
}
}
break;
}
}
#endif
}
}
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() < MIN_PLAYERS_CHECK) return;
static i, iFlags;
for(i=1; i < g_iMaxPlayers; i++)
{
if(BIT_VALID(g_iBitClientValid, i))
{
if(iFlags || (iFlags = get_user_flags(i) & ACCESS_LEVEL_IMMUNITY))
{
switch(_:cs_get_user_team(i))
{
case 3: if(++g_count[i] >= MAX_SPECT_CHECK_PL) AfkPunishment(i);
}
}
}
}
}

public AfkPunishment(i)
{
get_user_name(i, name, charsmax(name));
client_print_color(0, 0, "^4[^3ProStrike^4] Игрок ^3%s ^4удален за длительное нахождение в ^3зрителях.", name);
server_cmd("kick #%d ^"Вы были кикнуты из-за длительного нахождения в зрителях.^"", get_user_userid(i));
}

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];
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя seregabeliko
сообщение 25.5.2014, 18:11
Сообщение #120
Стаж: 12 лет

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

Цитата(firante @ 25.5.2014, 13:48) *
trollface,
Зашёл админом имеет флаг доступа на BAN но всё равно кикает с спектаторах!
sma
Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif

#define ACCESS_LEVEL_IMMUNITY (ADMIN_BAN|ADMIN_LEVEL_H) // Уровень доступа позволяющий беспрепятственно сидеть в зрителях
#define TIME_AFK_CHECK 15.0 // Интервал между проверками игроков, чем меньше значение, тем больше нагрузка на сервер.
#define MAX_AFK_WARNING 3 // Количество предупреждений после которых последует наказание.
#define TIME_SPECT_CHECK 60.0 // Интервал между проверками зрителей, чем меньше значение, тем больше нагрузка на сервер.
#define MAX_SPECT_CHECK_PL 2 // Количество проверок игрока на нахождение в зрителях, после которых его кикнет
#define MIN_PLAYERS_CHECK 1 // Минимальное количество игроков, когда включается функция проверки зрителей.
#define BOMB_TRANSFER // Передавать ли бомбу игрокам, если игрок AFK. [Закомментируйте, если хотите, чтобы бомба просто выкидывалась]
// !!! Включение прибавит чутка нагрузки !!!
#pragma semicolon 1

#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 Float:g_fOldOrigin[33][3], Float:g_fOldAngles[33][3];
new g_iBitClientValid, g_iWarning[33];
new g_iMaxPlayers;
new g_count[33];
new name[32];

public plugin_init()
{
register_plugin("Afk Control", "0.4.1", "Freedo.m | neygomon");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1);
RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Post", 1);
g_iMaxPlayers = get_maxplayers();
set_task(TIME_SPECT_CHECK, "SpectatorCheck", .flags = "b");
}

public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return;
BIT_ADD(g_iBitClientValid, id);
g_count[id] = 0;
}

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

public Ham_PlayerSpawn_Post(id)
{
if(!is_user_alive(id)) return;
g_iWarning[id] = 0;

pev(id, pev_origin, g_fOldOrigin[id]);
pev(id, pev_angles, g_fOldAngles[id]);

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

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

public AfkCheck(id)
{
id -= TASK_AFK_CHECK;
new Float:fNewOrigin[3], Float:fNewAngles[3];
pev(id, pev_origin, fNewOrigin);
pev(id, pev_angles, fNewAngles);
if(xs_vec_equal(g_fOldOrigin[id], fNewOrigin) && xs_vec_equal(g_fOldAngles[id], fNewAngles))
{
get_user_name(id, name, charsmax(name));

if(++g_iWarning[id] >= MAX_AFK_WARNING)
{
user_kill(id, 1);
engclient_cmd(id, "jointeam", "6");
client_cmd(id, "spk events/friend_died");
client_print_color(0, 0, "^4[^3ProStrike^4] Игрок ^3%s ^4был перемещен в зрители, так как был ^3AFK.", name);
}
else client_cmd(id, "spk events/tutor_msg");
client_print_color(id, 0, "^4[^3ProStrike^4] Вы не проявляете активность! Предупреждения: ^3%i/%i", g_iWarning[id], MAX_AFK_WARNING);

if(user_has_weapon(id, CSW_C4))
{
engclient_cmd(id, "drop", "weapon_c4");
client_print_color(0, 0, "^4[^3ProStrike^4] Игрок ^3%s ^4выкинул бомбу, так как находится ^3AFK.", name);
#if defined BOMB_TRANSFER
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(i != id && is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)
{
new iWeaponC4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4");
if(pev_valid(iWeaponC4))
{
new iOwner = pev(iWeaponC4, pev_owner);
if(iOwner > g_iMaxPlayers)
{
set_pev(iOwner, pev_flags, pev(iOwner, pev_flags) | FL_ONGROUND);
dllfunc(DLLFunc_Touch, iOwner, i);
}
}
break;
}
}
#endif
}
}
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() < MIN_PLAYERS_CHECK) return;
static i, iFlags;
for(i=1; i < g_iMaxPlayers; i++)
{
if(BIT_VALID(g_iBitClientValid, i))
{
if(iFlags || (iFlags = get_user_flags(i) & ACCESS_LEVEL_IMMUNITY))
{
switch(_:cs_get_user_team(i))
{
case 3: if(++g_count[i] >= MAX_SPECT_CHECK_PL) AfkPunishment(i);
}
}
}
}
}

public AfkPunishment(i)
{
get_user_name(i, name, charsmax(name));
client_print_color(0, 0, "^4[^3ProStrike^4] Игрок ^3%s ^4удален за длительное нахождение в ^3зрителях.", name);
server_cmd("kick #%d ^"Вы были кикнуты из-за длительного нахождения в зрителях.^"", get_user_userid(i));
}

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];
}
тоже самое поставил плагин имунка есть но кикает админов
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
8 страниц V  « 5 6 7 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: