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

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

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

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

помогите удалить функцию с плагина

, afk_control [РЕШЕНО]
Статус пользователя bbuzzy
сообщение 31.7.2015, 15:38
Сообщение #1
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

Привет всем! Помогите удалить функции из плагина, тоисть удалить проверку на афк:

->#define TIME_AFK_CHECK 20.0 // Интервал между проверками игроков, чем меньше значение, тем больше нагрузка на сервер.
->#define MAX_AFK_WARNING 3 // Количество предупреждений после которых последует наказание.

и оставить только проверку зрителя (спектатора)

#define TIME_VALID_ADD 15.0 // Длительность защиты игрока от плагина, когда он только зашёл на сервер.
#define TIME_SPECT_CHECK 30.0 // Интервал между проверками зрителей, чем меньше значение, тем больше нагрузка на сервер.
#define MIN_PLAYERS_CHECK 20 // Минимальное количество игроков, когда включается функция проверки зрителей.

Cкрытый текст
Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>

#define TIME_VALID_ADD 15.0 // Длительность защиты игрока от плагина, когда он только зашёл на сервер.
#define TIME_AFK_CHECK 20.0 // Интервал между проверками игроков, чем меньше значение, тем больше нагрузка на сервер.
#define MAX_AFK_WARNING 3 // Количество предупреждений после которых последует наказание.
#define TIME_SPECT_CHECK 30.0 // Интервал между проверками зрителей, чем меньше значение, тем больше нагрузка на сервер.
#define MIN_PLAYERS_CHECK 20 // Минимальное количество игроков, когда включается функция проверки зрителей.

#pragma semicolon 1

#define MAX_PLAYERS 32
#define MSG_SAY_TEXT 76
#define MSG_SEND_AUDIO 100

#define TASK_AFK_CHECK 139734
#define TASK_VALID_ADD 759846
#define TASK_SPECT_CHECK 645986
#define TASK_SPECT_REMOVE 295466

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define _BIT_VALID(%1,%2) ((%1) & (1 << (%2)))
#define _BIT_ADD(%1,%2) ((%1) |= (1 << (%2)))
#define _BIT_SUB(%1,%2) ((%1) &= ~(1 << (%2)))
#define _BIT_NOT_VALID(%1,%2) (~(%1) & (1 << (%2)))

new Float:g_fOldOrigin[MAX_PLAYERS + 1][3], Float:g_fOldAngles[MAX_PLAYERS + 1][3];
new g_iBitClientValid, g_iWarning[MAX_PLAYERS + 1];
new g_iMaxPlayers;

public plugin_init()
{
register_plugin("Afk Control", "0.1 Final", "Freedo.m");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1);
RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Post", 1);
register_menucmd(register_menuid("Afk Menu"), 1, "Handle_AfkMenu");
g_iMaxPlayers = get_maxplayers();
set_task(TIME_SPECT_CHECK, "SpectatorCheck", TASK_SPECT_CHECK, _, _, "b");
}

public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return;
set_task(TIME_VALID_ADD, "ClientValidAdd", id+TASK_VALID_ADD);
}

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

public ClientValidAdd(id)
{
id -= TASK_VALID_ADD;
BIT_ADD(g_iBitClientValid, id);
}

public Ham_PlayerSpawn_Post(id)
{
if(!is_user_alive(id)) return;
g_iWarning[id] = 0;
if(task_exists(id+TASK_AFK_CHECK)) remove_task(id+TASK_AFK_CHECK);
set_task(1.0, "SpawnCheck", 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 SpawnCheck(id)
{
id -= TASK_AFK_CHECK;
pev(id, pev_origin, g_fOldOrigin[id]);
pev(id, pev_angles, g_fOldAngles[id]);
}

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))
{
if(++g_iWarning[id] >= MAX_AFK_WARNING)
{
user_kill(id, 1);
engclient_cmd(id, "jointeam", "6");
SendAudio(id, "events/friend_died.wav");
}
else SendAudio(id, "events/tutor_msg.wav");
PrintMsg(id, "!g|AFK|!y Вы не проявляете активность, предупреждения: !g%i/%i", g_iWarning[id], MAX_AFK_WARNING);
if(user_has_weapon(id, CSW_C4)) engclient_cmd(id, "drop", "weapon_c4");
}
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;
new id;
for(new i; i < g_iMaxPlayers; i++)
{
if(_BIT_VALID(g_iBitClientValid, i))
{
id = (i + 1);
switch(_:cs_get_user_team(id))
{
case 0: AfkPunishment(id);
case 3:
{
Show_AfkMenu(id);
SendAudio(id, "events/tutor_msg.wav");
set_task(10.0, "AfkPunishment", id);
}
}
}
}
}

public Show_AfkMenu(id)
{
new szMenu[256], iLen = formatex(szMenu, charsmax(szMenu), "\y[AFK-spectr] Вы наблюдаете за игрой?^nЕсли Вы не АФК нажмите 1.^nУ Вас 10 сек. для ответа.^n^n");
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wДа! Я не АФК!");
return show_menu(id, 1, szMenu, 10, "Afk Menu");
}
public Handle_AfkMenu(id)
{
remove_task(id);
return PLUGIN_HANDLED;
}

public AfkPunishment(id)
{
server_cmd("kick #%d Вы были кикнуты из-за нахождения в зрителях.", get_user_userid(id));
}

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];
}

stock SendAudio(id, szDirSound[])
{
message_begin(MSG_ONE_UNRELIABLE, MSG_SEND_AUDIO, _, id);
write_byte(id);
write_string(szDirSound);
write_short(100);
message_end();
}

stock PrintMsg(const id, const szMessage[], any:...)
{
if(!is_user_connected(id)) return;
new szMsg[190];
vformat(szMsg, charsmax(szMsg), szMessage, 3);
while(replace(szMsg, charsmax(szMsg), "!y", "^1")) {}
while(replace(szMsg, charsmax(szMsg), "!t", "^3")) {}
while(replace(szMsg, charsmax(szMsg), "!g", "^4")) {}
message_begin(MSG_ONE_UNRELIABLE, MSG_SAY_TEXT, _, id);
write_byte(id);
write_string(szMsg);
message_end();
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя BornToBeFree
сообщение 31.7.2015, 15:58
Сообщение #2


Стаж: 12 лет

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

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

А если просто закомментировать строки, работать разве не будет?

Код:
// #define TIME_AFK_CHECK 20.0 // Интервал между проверками игроков, чем меньше значение, тем больше нагрузка на сервер
// #define MAX_AFK_WARNING 3 // Количество предупреждений после которых последует наказание


Скидка 5% при заказе сервера
Чтобы получить 5% скидку при заказе сервера на хостинге Serva4ok.ru
Необходимо ввести это кодовое слово gKUt-FENO-ZonE-aIaa
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя bbuzzy
сообщение 31.7.2015, 16:55
Сообщение #3
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

Нет! Не работает... Много ошибок

Отредактировал: bbuzzy, - 31.7.2015, 16:55
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 31.7.2015, 17:25
Сообщение #4


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

bbuzzy, ну так ошибки покажите
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя r1nk0
сообщение 31.7.2015, 17:29
Сообщение #5


Стаж: 12 лет

Сообщений: 1417
Благодарностей: 705
Полезность: 349

а это случаем не плагин неугомона?


Создание и редактирование карт ($) - vk.com/id476857873
Настройка и техническое обслуживание ваших игровых серверов - vk.com/id476857873
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Avrora
сообщение 31.7.2015, 17:34
Сообщение #6


Стаж: 13 лет
Город: Санкт-Петербург


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

Цитата(r1nk0 @ 31.7.2015, 17:25) *
а это случаем не плагин неугомона?

Freedo.m
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bbuzzy
сообщение 31.7.2015, 18:40
Сообщение #7
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

Bloo,


Ошибка компиляции плагина!
Прочитайте сообщения об ошибках:

Welcome to the AMX Mod X 1.8.2 Compiler.
Copyright © 1997-2013 ITB CompuPhase, AMX Mod X Team

afk_control.sma(73) : error 017: undefined symbol "TIME_AFK_CHECK"
afk_control.sma(73) : warning 215: expression has no effect
afk_control.sma(73) : warning 215: expression has no effect
afk_control.sma(73) : error 029: invalid expression, assumed zero
afk_control.sma(73) : error 029: invalid expression, assumed zero
afk_control.sma(73) : fatal error 107: too many error messages on one line

Compilation aborted.
4 Errors.

Отредактировал: bbuzzy, - 31.7.2015, 18:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bbuzzy
сообщение 1.8.2015, 9:49
Сообщение #8
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

удалил в плагине часть кода, начиная с 67 строки по 109, как результат:

afk_control.sma
Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>

#define TIME_VALID_ADD 15.0 // Длительность защиты игрока от плагина, когда он только зашёл на сервер.
//#define TIME_AFK_CHECK 20.0 // Интервал между проверками игроков, чем меньше значение, тем больше нагрузка на сервер.
//#define MAX_AFK_WARNING 3 // Количество предупреждений после которых последует наказание.
#define TIME_SPECT_CHECK 30.0 // Интервал между проверками зрителей, чем меньше значение, тем больше нагрузка на сервер.
#define MIN_PLAYERS_CHECK 1 // Минимальное количество игроков, когда включается функция проверки зрителей.

#pragma semicolon 1

#define MAX_PLAYERS 32
#define MSG_SAY_TEXT 76
#define MSG_SEND_AUDIO 100

#define TASK_AFK_CHECK 139734
#define TASK_VALID_ADD 759846
#define TASK_SPECT_CHECK 645986
#define TASK_SPECT_REMOVE 295466

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define _BIT_VALID(%1,%2) ((%1) & (1 << (%2)))
#define _BIT_ADD(%1,%2) ((%1) |= (1 << (%2)))
#define _BIT_SUB(%1,%2) ((%1) &= ~(1 << (%2)))
#define _BIT_NOT_VALID(%1,%2) (~(%1) & (1 << (%2)))

new Float:g_fOldOrigin[MAX_PLAYERS + 1][3], Float:g_fOldAngles[MAX_PLAYERS + 1][3];
new g_iBitClientValid, g_iWarning[MAX_PLAYERS + 1];
new g_iMaxPlayers;

public plugin_init()
{
register_plugin("Afk Control", "0.1 Final", "Freedo.m");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1);
RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Post", 1);
register_menucmd(register_menuid("Afk Menu"), 1, "Handle_AfkMenu");
g_iMaxPlayers = get_maxplayers();
set_task(TIME_SPECT_CHECK, "SpectatorCheck", TASK_SPECT_CHECK, _, _, "b");
}

public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return;
set_task(TIME_VALID_ADD, "ClientValidAdd", id+TASK_VALID_ADD);
}

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

public ClientValidAdd(id)
{
id -= TASK_VALID_ADD;
BIT_ADD(g_iBitClientValid, id);
}

public SpectatorCheck()
{
if(get_playersnum() < MIN_PLAYERS_CHECK) return;
new id;
for(new i; i < g_iMaxPlayers; i++)
{
if(_BIT_VALID(g_iBitClientValid, i))
{
id = (i + 1);
switch(_:cs_get_user_team(id))
{
case 0: AfkPunishment(id);
case 3:
{
Show_AfkMenu(id);
SendAudio(id, "events/tutor_msg.wav");
set_task(10.0, "AfkPunishment", id);
}
}
}
}
}

public Show_AfkMenu(id)
{
new szMenu[256], iLen = formatex(szMenu, charsmax(szMenu), "\y[AFK] Вы наблюдаете за игрой?^nЕсли Вы не АФК нажмите 1.^nУ Вас 10 сек. для ответа.^n^n");
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wДа! Я не АФК!");
return show_menu(id, 1, szMenu, 10, "Afk Menu");
}
public Handle_AfkMenu(id)
{
remove_task(id);
return PLUGIN_HANDLED;
}

public AfkPunishment(id)
{
server_cmd("kick #%d Вы были кикнуты из-за нахождения в зрителях.", get_user_userid(id));
}

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];
}

stock SendAudio(id, szDirSound[])
{
message_begin(MSG_ONE_UNRELIABLE, MSG_SEND_AUDIO, _, id);
write_byte(id);
write_string(szDirSound);
write_short(100);
message_end();
}

stock PrintMsg(const id, const szMessage[], any:...)
{
if(!is_user_connected(id)) return;
new szMsg[190];
vformat(szMsg, charsmax(szMsg), szMessage, 3);
while(replace(szMsg, charsmax(szMsg), "!y", "^1")) {}
while(replace(szMsg, charsmax(szMsg), "!t", "^3")) {}
while(replace(szMsg, charsmax(szMsg), "!g", "^4")) {}
message_begin(MSG_ONE_UNRELIABLE, MSG_SAY_TEXT, _, id);
write_byte(id);
write_string(szMsg);
message_end();
}


после компиляции:



помогите убрать варнинги! Спасибо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя georgeml
сообщение 1.8.2015, 10:20
Сообщение #9
Стаж: 12 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

Цитата(bbuzzy @ 1.8.2015, 16:45) *
Cкрытый текст
Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>

#define TIME_VALID_ADD 15.0 // Длительность защиты игрока от плагина, когда он только зашёл на сервер.
#define TIME_SPECT_CHECK 30.0 // Интервал между проверками зрителей, чем меньше значение, тем больше нагрузка на сервер.
#define MIN_PLAYERS_CHECK 20 // Минимальное количество игроков, когда включается функция проверки зрителей.

#pragma semicolon 1

#define MAX_PLAYERS 32
#define MSG_SAY_TEXT 76
#define MSG_SEND_AUDIO 100

#define TASK_VALID_ADD 759846
#define TASK_SPECT_CHECK 645986
#define TASK_SPECT_REMOVE 295466

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define _BIT_VALID(%1,%2) ((%1) & (1 << (%2)))
#define _BIT_ADD(%1,%2) ((%1) |= (1 << (%2)))
#define _BIT_SUB(%1,%2) ((%1) &= ~(1 << (%2)))
#define _BIT_NOT_VALID(%1,%2) (~(%1) & (1 << (%2)))

new g_iBitClientValid;
new g_iMaxPlayers;

public plugin_init()
{
register_plugin("Afk Control", "0.1 Final", "Freedo.m");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1);
RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Post", 1);
register_menucmd(register_menuid("Afk Menu"), 1, "Handle_AfkMenu");
g_iMaxPlayers = get_maxplayers();
set_task(TIME_SPECT_CHECK, "SpectatorCheck", TASK_SPECT_CHECK, _, _, "b");
}

public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return;
set_task(TIME_VALID_ADD, "ClientValidAdd", id+TASK_VALID_ADD);
}

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

public ClientValidAdd(id)
{
id -= TASK_VALID_ADD;
BIT_ADD(g_iBitClientValid, id);
}


public SpectatorCheck()
{
if(get_playersnum() < MIN_PLAYERS_CHECK) return;
new id;
for(new i; i < g_iMaxPlayers; i++)
{
if(_BIT_VALID(g_iBitClientValid, i))
{
id = (i + 1);
switch(_:cs_get_user_team(id))
{
case 0: AfkPunishment(id);
case 3:
{
Show_AfkMenu(id);
SendAudio(id, "events/tutor_msg.wav");
set_task(10.0, "AfkPunishment", id);
}
}
}
}
}

public Show_AfkMenu(id)
{
new szMenu[256], iLen = formatex(szMenu, charsmax(szMenu), "\y[AFK-spectr] Вы наблюдаете за игрой?^nЕсли Вы не АФК нажмите 1.^nУ Вас 10 сек. для ответа.^n^n");
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wДа! Я не АФК!");
return show_menu(id, 1, szMenu, 10, "Afk Menu");
}
public Handle_AfkMenu(id)
{
remove_task(id);
return PLUGIN_HANDLED;
}

public AfkPunishment(id)
{
server_cmd("kick #%d Вы были кикнуты из-за нахождения в зрителях.", get_user_userid(id));
}

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];
}

stock SendAudio(id, szDirSound[])
{
message_begin(MSG_ONE_UNRELIABLE, MSG_SEND_AUDIO, _, id);
write_byte(id);
write_string(szDirSound);
write_short(100);
message_end();
}

stock PrintMsg(const id, const szMessage[], any:...)
{
if(!is_user_connected(id)) return;
new szMsg[190];
vformat(szMsg, charsmax(szMsg), szMessage, 3);
while(replace(szMsg, charsmax(szMsg), "!y", "^1")) {}
while(replace(szMsg, charsmax(szMsg), "!t", "^3")) {}
while(replace(szMsg, charsmax(szMsg), "!g", "^4")) {}
message_begin(MSG_ONE_UNRELIABLE, MSG_SAY_TEXT, _, id);
write_byte(id);
write_string(szMsg);
message_end();
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя bbuzzy
сообщение 1.8.2015, 11:35
Сообщение #10
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

georgeml, спасибо, но сам плагин не работает (

Отредактировал: bbuzzy, - 1.8.2015, 11:35
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 1.8.2015, 11:57
Сообщение #11


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

bbuzzy, пробуй
Cкрытый текст
Код:
#include <amxmodx>
#include <cstrike>

#define TIME_VALID_ADD 15.0 // Длительность защиты игрока от плагина, когда он только зашёл на сервер.
#define TIME_SPECT_CHECK 30.0 // Интервал между проверками зрителей, чем меньше значение, тем больше нагрузка на сервер.
#define MIN_PLAYERS_CHECK 20 // Минимальное количество игроков, когда включается функция проверки зрителей.

#pragma semicolon 1

#define MSG_SEND_AUDIO 100

#define TASK_VALID_ADD 759846
#define TASK_SPECT_CHECK 645986

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define _BIT_VALID(%1,%2) ((%1) & (1 << (%2)))
#define _BIT_ADD(%1,%2) ((%1) |= (1 << (%2)))
#define _BIT_SUB(%1,%2) ((%1) &= ~(1 << (%2)))
#define _BIT_NOT_VALID(%1,%2) (~(%1) & (1 << (%2)))

new g_iBitClientValid;
new g_iMaxPlayers;

public plugin_init()
{
register_plugin("Afk Control", "0.1 Final", "Freedo.m");
register_menucmd(register_menuid("Afk Menu"), 1, "Handle_AfkMenu");
g_iMaxPlayers = get_maxplayers();
set_task(TIME_SPECT_CHECK, "SpectatorCheck", TASK_SPECT_CHECK, _, _, "b");
}

public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return;
set_task(TIME_VALID_ADD, "ClientValidAdd", id+TASK_VALID_ADD);
}

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

public ClientValidAdd(id)
{
id -= TASK_VALID_ADD;
BIT_ADD(g_iBitClientValid, id);
}

public SpectatorCheck()
{
if(get_playersnum() < MIN_PLAYERS_CHECK) return;
new id;
for(new i; i < g_iMaxPlayers; i++)
{
if(_BIT_VALID(g_iBitClientValid, i))
{
id = (i + 1);
switch(_:cs_get_user_team(id))
{
case 0: AfkPunishment(id);
case 3:
{
Show_AfkMenu(id);
SendAudio(id, "events/tutor_msg.wav");
set_task(10.0, "AfkPunishment", id);
}
}
}
}
}

public Show_AfkMenu(id)
{
new szMenu[256], iLen = formatex(szMenu, charsmax(szMenu), "\y[AFK-spectr] Вы наблюдаете за игрой?^nЕсли Вы не АФК нажмите 1.^nУ Вас 10 сек. для ответа.^n^n");
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wДа! Я не АФК!");
return show_menu(id, 1, szMenu, 10, "Afk Menu");
}

public Handle_AfkMenu(id)
{
remove_task(id);
return PLUGIN_HANDLED;
}

public AfkPunishment(id)
{
server_cmd("kick #%d Вы были кикнуты из-за нахождения в зрителях.", get_user_userid(id));
}

stock SendAudio(id, szDirSound[])
{
message_begin(MSG_ONE_UNRELIABLE, MSG_SEND_AUDIO, _, id);
write_byte(id);
write_string(szDirSound);
write_short(100);
message_end();
}


Отредактировал: Fintok, - 1.8.2015, 11:58
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя bbuzzy
сообщение 1.8.2015, 12:38
Сообщение #12
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

Fintok, спасибо! работает!

совсем забыл что надо добавить проверку админа, чтоб не кикало, думаю не трудно...

Отредактировал: bbuzzy, - 1.8.2015, 12:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 1.8.2015, 15:37
Сообщение #13


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

bbuzzy, замени в коде

Код:

id = (i + 1);
switch(_:cs_get_user_team(id))
--->
Код:
id = (i + 1);

if(get_user_flags(id) & ADMIN_IMMUNITY)
continue;

switch(_:cs_get_user_team(id))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя bbuzzy
сообщение 2.8.2015, 10:04
Сообщение #14
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

Fintok, после пару часов работы, в логах ->

L 08/02/2015 - 11:08:56: Start of error session.
L 08/02/2015 - 11:08:56: Info (map "awp_india") (file "addons/amxmodx/logs/error_20150802.log")
L 08/02/2015 - 11:08:56: [HAMSANDWICH] Function Ham_PlayerSpawn_Post not found.
L 08/02/2015 - 11:08:56: [AMXX] Run time error 10 (plugin "spec_afk.amxx") (native "RegisterHam") - debug not enabled!
L 08/02/2015 - 11:08:56: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 08/02/2015 - 11:23:56: Start of error session.
L 08/02/2015 - 11:23:56: Info (map "aim_sk_awp") (file "addons/amxmodx/logs/error_20150802.log")
L 08/02/2015 - 11:23:56: [HAMSANDWICH] Function Ham_PlayerSpawn_Post not found.
L 08/02/2015 - 11:23:56: [AMXX] Run time error 10 (plugin "spec_afk.amxx") (native "RegisterHam") - debug not enabled!
L 08/02/2015 - 11:23:56: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).


Отредактировал: bbuzzy, - 2.8.2015, 20:03
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bbuzzy
сообщение 3.8.2015, 8:13
Сообщение #15
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

кто знает что за функция и где е взять?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Lettro
сообщение 3.8.2015, 8:31
Сообщение #16


Стаж: 11 лет

Сообщений: 61
Благодарностей: 15
Полезность: 150

bbuzzy, Модуль HAMSANDWICH. В нём отсутствует данная функция(Ну, ты сам уже понял). Поищи версию модуля с этой функцией.

Отредактировал: Lettro, - 3.8.2015, 8:33
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 3.8.2015, 11:47
Сообщение #17


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

bbuzzy, пропиши параметр debug после spec_afk.amxx в plugins.ini и выложи сюда результат дебага.
А ты уверен, что поставил именно ту версию которую я предложил? В моей версии нету модуля hamsandwich, все функции модуля вырезаны.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bbuzzy
сообщение 3.8.2015, 12:15
Сообщение #18
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

Fintok, Да. отпишу по дебагу.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bbuzzy
сообщение 17.8.2015, 19:18
Сообщение #19
Стаж: 16 лет

Сообщений: 145
Благодарностей: 25
Полезность: 121

решил купить плагин, и не заморачиватся с етим.
Получился афк кикер в спектры + админский переход в спектры и обратно в игру неограниченное колличество раз.

ах да.. чуть не забыл - мод игры CSDM

Отредактировал: bbuzzy, - 17.8.2015, 19:20
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: