плагин Ultimate Chats Control 2.8.1

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
149
Реакции
6
Помог
1 раз(а)
Основная информация

Проблема: плагин Ultimate Chats Control 2.8.1

Ошибка:
L 11/27/2017 - 19:20:06: [ReAPI] VTC: isn't available
L 11/27/2017 - 19:20:06: [AMXX] Displaying debug trace (plugin "ucc.amxx")
L 11/27/2017 - 19:20:06: [AMXX] Run time error 10: native error (native "VTC_MuteClient")
L 11/27/2017 - 19:20:06: [AMXX] [0] ucc.sma::client_putinserver (line 234)
Дополнительная информация

Amx Mod X: 1.8.2

Билд:
Код:
6153


ReGamedll:
Код:
Не указан


Список модулей:
PHP:
[ 1] MySQL                   1.8.2       AMX Mod X Dev Team   running
[ 2] GeoIP 1.8.2 AMX Mod X Dev Team running
[ 3] Engine 1.8.2 AMX Mod X Dev Team running
[ 4] FakeMeta 1.8.2 AMX Mod X Dev Team running
[ 5] okapi 1.0 joaquimandrade running
[ 6] Orpheu 2.6.3 joaquimandrade & Ar running
[ 7] CStrike 1.8.2 AMX Mod X Dev Team running
[ 8] Ham Sandwich 1.8.2 AMX Mod X Dev Team running
[ 9] CSX 1.8.2 AMX Mod X Dev Team running
[10] ReAPI 5.2.0.142- Asmodai & s1lent running
[11] Fun 1.8.2 AMX Mod X Dev Team running
[12] Sockets 1.8.2 HLSW Dev Team running
[13] Sockets2 1.8.1.3746 HLSW Dev Team running
[14] RegEx 1.8.2 AMX Mod X Dev Team running
14 modules, 14 correct


Список плагинов:
HTML:
[  1] opengl detector         0.8.30ob    kanagava          opengl32.amxx    running
[ 2] AIM detector 0.9.4b kanagava aim_detector.am running
[ 3] DopBan 2.8.2b kanagava dop_ban2.amxx running
[ 4] FreshBans 1.3.7b kanagava fresh_bans_137b running
[ 5] Admin Loader 2.3 neygomon admin_loader.am running
[ 6] ScreenMaker 1.1 neygomon screen_maker.am running
[ 7] Skill ELO 15.07.22 SKAJIbnEJIb skill_elo.amxx running
[ 8] CsStats MySQL 15.07.15 SKAJIbnEJIb csstats_mysql.a running
[ 9] Stats Configuration 15.07.15 SKAJIbnEJIb & AM statscfg_rbs.am running
[ 10] StatsX RBS 15.07.24 SKAJIbnEJIb & AM statsx_rbs.amxx running
[ 11] Ultimate Chats Control 2.8.1 neygomon ucc.amxx debug
[ 12] [182] Chat RBS 17.06.17BE SKAJIbnEJIb chat_rbs.amxx running
[ 13] Top Award RBS 15.07.15 SKAJIbnEJIb topaward_rbs.am running
[ 14] VIP RBS 15.07.18 SKAJIbnEJIb vip_rbs.amxx running
[ 15] Ultimate Weapons 15.07.15 SKAJIbnEJIb ultimate_weapon running
[ 16] Army Ranks Ultimate 15.07.24 SKAJIbnEJIb army_ranks_ulti running
[ 17] MapChooser RBS 15.07.15 SKAJIbnEJIb & UF mapchooser_rbs. running
[ 18] NextMap 1.8.2 AMXX Dev Team nextmap.amxx running
[ 19] TimeLeft 1.8.2 AMXX Dev Team timeleft.amxx running
[ 20] Kill Assist RBS 15.07.24 Digi & SKAJIbnEJ killassist_rbs. running
[ 21] [182] Damager RBS 17.06.17BE SKAJIbnEJIb damager_rbs.amx running
[ 22] [182] C4 Real Timer 17.09.14 Sanlerus c4_realtimer.am running
[ 23] Afk Time 15.07.15 Sanlerus afk_time.amxx running
[ 24] Maps Menu 1.8.2 AMXX Dev Team mapsmenu.amxx running
[ 25] Admin Chat 1.8.2 AMXX Dev Team adminchat.amxx running
[ 26] Menus Front-End 1.3 neugomon menufront_end.a running
[ 27] Admin Commands 1.8.2 AMXX Dev Team admincmd.amxx running
[ 28] Anti Flood 1.8.2 AMXX Dev Team antiflood.amxx running
[ 29] Commands Menu 1.8.2 AMXX Dev Team cmdmenu.amxx running
[ 30] Players Menu 1.3.2 neugomon players_menu.am running
[ 31] Pause Plugins 1.8.2 AMXX Dev Team pausecfg.amxx running
[ 32] Restrict Weapons 1.8.2 AMXX Dev Team restmenu.amxx running
[ 33] Admin Votes 1.8.2 AMXX Dev Team adminvote.amxx running
[ 34] Map Spawns Editor 1.0.16 iG_os map_spawns_edit running
[ 35] Advert Messages 1.2.2 neygomon adverts.amxx running
[ 36] Lite Admin ESP 1.0 neygomon admin_esp.amxx running
[ 37] Ping Control 1.31 neygomon Ping_Control.am running
[ 38] Lite Recoder 1.0.1 neygomon demorec.amxx running
[ 39] Parachute 1.1 maeStro | neygom parachute.amxx running
[ 40] Warmup 1.1.0 Radius warmup.amxx stopped
[ 41] PistolMenu 1.0 DUKKHAZ0R pistols.amxx running
[ 42] Auto Team Balance Adva 1.1.1 Radius auto_team_balan running
[ 43] Super WeaponMenu 1.1 neygomon s_weaponmenu.am running
[ 44] Reset Score (c) Leo_[B 1.0 Leo_[BH] rs_leo.amxx running
[ 45] Snowball 0.6 alpha s1lent snowball.amxx running
45 plugins, 44 running


Список метамодулей:
PHP:
[ 1] AMX Mod X        RUN   -    amxmodx.so        v1.8.2    ini   Start ANY
[ 2] dproto_EF RUN - dproto.so v0.9.582 ini Start Never
[ 3] VoiceTranscoder RUN - vtc.so v2017RC3 ini ANY
[ 4] ReSemiclip RUN - semiclip.so v2.2(a) ini ANY
[ 5] WHBlocker RUN - whblocker_mm_i38 v1.5.625 ini ANY
[ 6] SRDetector RUN - srdetector.so v1.2 ini ANY
[ 7] MySQL RUN - mysql_amxx_i386. v1.8.2 pl1 ANY
[ 8] Engine RUN - engine_amxx_i386 v1.8.2 pl1 ANY
[ 9] FakeMeta RUN - fakemeta_amxx_i3 v1.8.2 pl1 ANY
[10] okapi RUN - okapi_amxx_i386. v1.0 pl1 ANY
[11] Orpheu RUN - orpheu_amxx_i386 v2.6.3 pl1 ANY
[12] CStrike RUN - cstrike_amxx_i38 v1.8.2 pl1 ANY
[13] Ham Sandwich RUN - hamsandwich_amxx v1.8.2 pl1 ANY
[14] CSX RUN - csx_amxx_i386.so v1.8.2 pl1 ANY
[15] ReAPI RUN - reapi_amxx_i386. v5.2.0.1 pl1 ANY Never
[16] Fun RUN - fun_amxx_i386.so v1.8.2 pl1 ANY
16 plugins, 16 running


Исходник:
Код:
#include <amxmodx>
#include <sqlx>
#tryinclude <reapi>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif

#define DB_HOST "cs36.csserv.ru" // MySQL Host
#define DB_USER "27059" // MySQL User
#define DB_PASS "aHGPYPzC" // MySQL Password
#define DB_NAME "27059" // MySQL Name

#define CLEAR_PERIOD 31 // Через сколько дней удалять истекшие GAG'и из MySQL

#define SORRY // Разрешить команду /sorry для извинения игроков
#define MUTEMENU // Поддержка команды /mute
#define GAG_ACCESS ADMIN_BAN // Доступ к функциям гага
#define SORRYTIME 60 // Как часто можно пользоваться командой /sorry. Время в секундах
#define PREFIX "Ultimate GAG" // Префикс в чате
#define SUPERADMIN ADMIN_RCON // Админ с флагом L может гагать других админов с иммунитетом

#define CHATS_BY_STATS // Включает функции блокировки чата игрокам, которые не набрали N фрагов/опыта на сервере
#define VOICE_CONTROL_BY_STATS 0
// 0 - CSX
// 1 - CSSTATS MYSQL by SKAJIbnEJIb
// 2 - CSSTATSX SQL by serfreeman1337
// 3 - AES 0.5 Vega by serfreeman1337
#define BLOCK_TEXT_CHAT
// Блокировать текстовый чат и голосовой
// Если закомментировано - блокировуется только голос
#define BLOCK_CHATS_INFO
// Выводит в текстовый чат сообщение о том, что чат/чаты для игрока заблокированы
const MIN_FRAGS = 10;
// Минимальное количество фрагов для доступа к микро
// Для VOICE_CONTROL_BY_STATS 3 настройка принимает значение ранга юзера(начиная с 1)
const ADMIN_FLAG = ADMIN_IMMUNITY;
// Флаг доступа, для которого не будут работать функции CHATS_BY_STATS

new g_BlockTimes[] = // Время блокировки GAG в минутах
{
5,
10,
30,
60,
180,
0 // навсегда
}

new g_AllowCommands[][] = // Разрешенные команды
{
"/me",
"/top15",
"/rank",
"/hp"
}

/* Словарь плагина */
#define MSG_SORRY_FLOOD "^1[^4%s^1] ^3Прекратите флудить! ^4Повторно извиниться можно через ^3%d сек"
#define MSG_SORRY_ADMIN "^1[^4%s^1] ^4Уважаемый ^3адмнистратор^4, игрок ^3%s ^4просит снять с него ^3GAG^4!"
#define MSG_CHAT_IS_BLOCKED "^1[^4%s^1] ^4Уважаемый ^3%s^4, Ваш чат ^3заблокирован^4!"
#define MSG_BLOCK_EXPIRED_TIME "^1[^4%s^1] ^4До разблокировки осталось ^1примерно ^3%d ^4мин."
#define MSG_BLOCK_EXPIRED "^1[^4%s^1] ^4Время блокировки ^3истекло^4. ^1Подождите обновления информации ..."
#define MSG_SAY_SORRY "^1[^4%s^1] ^4Чтобы извиниться, напишите в чат ^3/sorry^4. Возможно, разблокируют раньше :)"
#define MSG_CHAT_UNBLOCK_ALL "^1[^4%s^1] ^4Игроку ^3%s ^4был разблокирован чат администратором ^3%s"
#define MSG_CHAT_UNBLOCK_PL "^1[^4%s^1] ^4Уважаемый ^3%s^4, администратор ^3%s ^4снял с Вас блокировку чата"
#define MSG_CHAT_BLOCK_ALL "^1[^4%s^1] ^4Администратор ^3%s ^4заблокировал чат игроку ^3%s ^1%s"
#define MSG_CHAT_BLOCK_PL "^1[^4%s^1] ^4Уважаемый ^3%s^4, администратор ^3%s ^4заблокировал Вам чат ^1%s"
#define MSG_MUTE_ALL_PLAYERS "^1[^4%s^1] ^4Вы установили mute на ^3всех ^4игроков."
#define MSG_UNMUTE_ALL_PLAYERS "^1[^4%s^1] ^4Вы сняли mute со ^3всех ^4игроков."
#define MSG_UNMUTE_PLAYER "^1[^4%s^1] ^4Вы сняли ^3mute ^4с игрока ^3%s^4."
#define MSG_MUTE_PLAYER "^1[^4%s^1] ^4Вы установили ^3mute ^4на игрока ^3%s^4."
#define MSG_BLOCK_CHATS0 "^1[^4%s^1] ^4Доступ к текстовому и голосовому чатам ^3закрыт^4!"
#define MSG_BLOCK_CHATS1 "^1[^4%s^1] ^4Доступ к голосовому чату ^3закрыт^4!"
#define MSG_BLOCK_CHATS2 "^1[^4%s^1] ^4Необходимо получить уровень ^3%s!"
#define MSG_BLOCK_CHATS3 "^1[^4%s^1] ^4Необходимо набрать ^3%i^1/^3%i ^4фрагов"

/* Технические данные */

enum _:MENU_SETTINGS
{
Menu,
SelectTime,
Pos
};
enum _:BLOCK
{
bGAG,
bSTATS
};
enum MENUS
{
GAG,
MUTE
};
enum queStates
{
SQL_INIT,
DROP_TABLE,
LOAD_PLAYER,
SAVE_BLOCK,
REMOVE_BLOCK
};

#if !defined MAX_PLAYERS
const MAX_PLAYERS = 32;
#endif
new Handle:g_hTuple, g_szQuery[2048], g_Data[3];
new g_iBlockExpired[MAX_PLAYERS + 1], bool:g_bBlockedChats[MAX_PLAYERS + 1][BLOCK];
new Trie:g_tAllowCmds;
new pl[MAX_PLAYERS], pnum;
new g_iMutePlayer[MAX_PLAYERS + 1][MAX_PLAYERS + 1];
new g_arrPlayers[MAX_PLAYERS + 1][MAX_PLAYERS];
new g_iMenuInfo[MAX_PLAYERS + 1][MENU_SETTINGS];
#if defined MUTEMENU
#include <fakemeta>
#endif
#if defined CHATS_BY_STATS
#if VOICE_CONTROL_BY_STATS == 0
#include <csstats>
#endif
#if VOICE_CONTROL_BY_STATS == 1
#include <csstats_mysql>
#endif
#if VOICE_CONTROL_BY_STATS == 2
#include <csstatsx_sql>
#endif
#if VOICE_CONTROL_BY_STATS == 3
#include <aes_v>
#endif
#if !defined _reapi_included
#include <hamsandwich>
#endif
#if defined BLOCK_CHATS_INFO
new g_iFragStats[MAX_PLAYERS + 1];
#if VOICE_CONTROL_BY_STATS == 3
new g_szAesLevelName[64];
#endif
#endif
#endif
public plugin_natives()
{
register_native("ucc_is_client_gaged", "native_ucc_is_client_gaged", true);
register_native("ucc_set_client_gag", "native_ucc_set_client_gag", true);
}

public plugin_init()
{
#define PNAME "Ultimate Chats Control"
#define VERSION "2.8.1"
#define AUTHOR "neygomon"
register_plugin(PNAME, VERSION, AUTHOR);
register_cvar("ucc_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
#if defined _reapi_included
if(has_vtc())
{
register_clcmd("amx_gagmenu", "ClCmdGagMenu");
#if defined CHATS_BY_STATS
RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn_Post", true);
#endif
}
#if !defined MUTEMENU
else set_fail_state("Needed meta plugin VTC [https://dev-cs.ru/threads/680/]");
#endif
#else
register_clcmd("amx_gagmenu", "ClCmdGagMenu");
#if defined CHATS_BY_STATS
RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn_Post", true);
#endif
#endif
#if defined MUTEMENU
register_clcmd("say /mute", "ClCmdMuteMenu");
register_clcmd("say_team /mute", "ClCmdMuteMenu");

register_forward(FM_Voice_SetClientListening, "SetClientListening_Pre", false);
#endif
#if defined SORRY
register_clcmd("say /sorry", "SaySorry");
register_clcmd("say_team /sorry", "SaySorry");
#endif
register_clcmd("say", "SayChat");
register_clcmd("say_team", "SayChat");

register_srvcmd("uсc_flush", "SrvCmdFlush");

register_menucmd(register_menuid("UCC Menu"), 1023, "MenuHandler");

set_task(60.0, "CheckBlockedUsers", .flags = "b");
}

public plugin_cfg()
{
SQL_Init();
#if defined CHATS_BY_STATS && defined BLOCK_CHATS_INFO && VOICE_CONTROL_BY_STATS == 3
set_task(1.0, "task__aes_get_level_name"); // fucking serfreeman1337. govnocoder
#endif
g_tAllowCmds = TrieCreate();
for(new i; i < sizeof g_AllowCommands; ++i)
TrieSetCell(g_tAllowCmds, g_AllowCommands, i);
}
#if defined CHATS_BY_STATS && defined BLOCK_CHATS_INFO && VOICE_CONTROL_BY_STATS == 3
public task__aes_get_level_name()
{
aes_get_level_name(MIN_FRAGS, g_szAesLevelName, charsmax(g_szAesLevelName), LANG_SERVER);
}
#endif
public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return;

g_iBlockExpired[id] = -1;
g_bBlockedChats[id][bGAG] = false;
g_bBlockedChats[id][bSTATS] = false;

arrayset(g_iMutePlayer[id], 0, sizeof g_iMutePlayer[]);
#if defined CHATS_BY_STATS
if(get_chats_access(id))
{
new szIP[16], szAuth[32];
get_user_ip(id, szIP, charsmax(szIP), 1);
get_user_authid(id, szAuth, charsmax(szAuth));

formatex(g_szQuery, charsmax(g_szQuery),
"SELECT `unban_time` FROM `ucc_gag` WHERE (`ip` = '%s' OR `steamid` = '%s') AND `unban_time` >= '0'",
szIP, szAuth
);

g_Data[0] = LOAD_PLAYER;
g_Data[1] = id;
SQL_ThreadQuery(g_hTuple, "SQL_ThreadsHandler", g_szQuery, g_Data, sizeof(g_Data));
}
else
{
VTC_MuteClient(id);
#if defined BLOCK_TEXT_CHAT
g_bBlockedChats[id][bSTATS] = true;
#endif
}
#else
new szIP[16], szAuth[32];
get_user_ip(id, szIP, charsmax(szIP), 1);
get_user_authid(id, szAuth, charsmax(szAuth));

formatex(g_szQuery, charsmax(g_szQuery),
"SELECT `unban_time` FROM `ucc_gag` WHERE (`ip` = '%s' OR `steamid` = '%s') AND `unban_time` >= '0'",
szIP, szAuth
);

g_Data[0] = LOAD_PLAYER;
g_Data[1] = id;
SQL_ThreadQuery(g_hTuple, "SQL_ThreadsHandler", g_szQuery, g_Data, sizeof(g_Data));
#endif
}
#if defined MUTEMENU
public SetClientListening_Pre(iReciever, iSender)
{
if(iSender != iReciever)
{
if(g_iMutePlayer[iReciever][iSender])
{
engfunc(EngFunc_SetClientListening, iReciever, iSender, false);
forward_return(FMV_CELL, false);
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}
#endif
#if defined SORRY
public SaySorry(id)
{
if(g_bBlockedChats[id][bGAG])
{
static iFloodTime[33], systime;
if(iFloodTime[id] > (systime = get_systime()))
ChatColor(id, 0, MSG_SORRY_FLOOD, PREFIX, iFloodTime[id] - systime);
else
{
new sName[32];
get_user_name(id, sName, charsmax(sName));

get_players(pl, pnum, "ch");
for(new i; i < pnum; ++i)
{
if(get_user_flags(pl) & GAG_ACCESS)
ChatColor(pl, 0, MSG_SORRY_ADMIN, PREFIX, sName);
}

iFloodTime[id] = systime + SORRYTIME;
}
}
return PLUGIN_HANDLED;
}
#endif
public SayChat(id)
{
#if defined CHATS_BY_STATS && defined BLOCK_TEXT_CHAT
if(!g_bBlockedChats[id][bGAG] && !g_bBlockedChats[id][bSTATS])
#else
if(!g_bBlockedChats[id][bGAG])
#endif
return PLUGIN_CONTINUE;

new sMessage[128];
read_args(sMessage, charsmax(sMessage));
remove_quotes(sMessage);

if(TrieKeyExists(g_tAllowCmds, sMessage))
return PLUGIN_CONTINUE;
else if(g_bBlockedChats[id][bGAG])
{
new sName[32], ost;
get_user_name(id, sName, charsmax(sName));
ChatColor(id, 0, MSG_CHAT_IS_BLOCKED, PREFIX, sName);

if(g_iBlockExpired[id] > 0)
{
if((ost = g_iBlockExpired[id] - get_systime()) / 60 > 0)
ChatColor(id, 0, MSG_BLOCK_EXPIRED_TIME, PREFIX, ost / 60);
else ChatColor(id, 0, MSG_BLOCK_EXPIRED, PREFIX);
}

ChatColor(id, 0, MSG_SAY_SORRY, PREFIX);
}
#if defined CHATS_BY_STATS && defined BLOCK_CHATS_INFO
else
{
ChatColor(id, 0, MSG_BLOCK_CHATS0, PREFIX);
#if VOICE_CONTROL_BY_STATS == 3
ChatColor(id, 0, MSG_BLOCK_CHATS2, PREFIX, g_szAesLevelName);
#else
ChatColor(id, 0, MSG_BLOCK_CHATS3, PREFIX, g_iFragStats[id], MIN_FRAGS);
#endif
}
#endif
return PLUGIN_HANDLED;
}
#if defined CHATS_BY_STATS
public CBasePlayer_Spawn_Post(const id)
{
if(!is_user_connected(id))
return;

if(get_chats_access(id))
{
VTC_UnmuteClient(id);
#if defined BLOCK_TEXT_CHAT
g_bBlockedChats[id][bSTATS] = false;
#endif
}
#if defined BLOCK_CHATS_INFO
else
{
#if defined BLOCK_TEXT_CHAT
ChatColor(id, 0, MSG_BLOCK_CHATS0, PREFIX);
#else
ChatColor(id, 0, MSG_BLOCK_CHATS1, PREFIX);
#endif
#if VOICE_CONTROL_BY_STATS == 3
ChatColor(id, 0, MSG_BLOCK_CHATS2, PREFIX, g_szAesLevelName);
#else
ChatColor(id, 0, MSG_BLOCK_CHATS3, PREFIX, g_iFragStats[id], MIN_FRAGS);
#endif
}
#endif
}
#endif
public SrvCmdFlush()
{
g_Data[0] = DROP_TABLE;
SQL_ThreadQuery(g_hTuple, "SQL_ThreadsHandler", "TRUNCATE `ucc_gag`", g_Data, sizeof(g_Data));

for(new id; id < sizeof g_iBlockExpired; ++id)
{
g_iBlockExpired[id] = -1;
g_bBlockedChats[id][bGAG] = false;
g_bBlockedChats[id][bSTATS] = false;
}

log_amx("%s [v: %s][a: %s] flushed all gags", PNAME, VERSION, AUTHOR);
}

public CheckBlockedUsers()
{
get_players(pl, pnum);
for(new i, sys = get_systime(); i < pnum; ++i)
{
if(g_iBlockExpired[pl] > 0)
{
if(sys > g_iBlockExpired[pl])
user_unblock(pl);
}
}
}

public ClCmdGagMenu(id)
{
if(get_user_flags(id) & GAG_ACCESS)
{
g_iMenuInfo[id][SelectTime] = 0;
g_iMenuInfo[id][Pos] = 0;
g_iMenuInfo[id][Menu] = any:GAG;

ShowMenu(id, 0);
}

return PLUGIN_HANDLED;
}

public ClCmdMuteMenu(id)
{
g_iMenuInfo[id][Pos] = 0;
g_iMenuInfo[id][Menu] = any:MUTE;

ShowMenu(id, 0);
return PLUGIN_HANDLED;
}

ShowMenu(id, iPos)
{
new start, end;
new iLen, sMenu[512];
new iKeys = MENU_KEY_0|MENU_KEY_8;
get_players(g_arrPlayers[id], pnum, "ch");

switch(g_iMenuInfo[id][Menu])
{
case GAG:
{
start = iPos * 7;
end = start + 7;
iLen = formatex(sMenu, charsmax(sMenu), "\d[\rAMX Gag\d] \yВыберите игрока\w\R%d/%d^n^n", iPos + 1, (pnum / 7 + ((pnum % 7) ? 1 : 0)));
}
case MUTE:
{
start = iPos * 6;
end = start + 6;
iKeys |= MENU_KEY_7;
iLen = formatex(sMenu, charsmax(sMenu), "\d[\rMute\d] \yВыберите игрока\w\R%d/%d^n^n", iPos + 1, (pnum / 6 + ((pnum % 6) ? 1 : 0)));
}
}

if(start >= pnum)
start = iPos = g_iMenuInfo[id][Pos] = 0;
if(end > pnum)
end = pnum;

switch(g_iMenuInfo[id][Menu])
{
case GAG:
{
#if defined SUPERADMIN
for(new i = start, bool:superadmin = bool:(get_user_flags(id) & SUPERADMIN), sName[32], plr, a; i < end; ++i)
#else
for(new i = start, sName[32], plr, a; i < end; ++i)
#endif
{
plr = g_arrPlayers[id];
get_user_name(plr, sName, charsmax(sName));

if(id == plr)
iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "\r%d. \d%s \y[\rЭто Вы\y]^n", ++a, sName);
#if defined SUPERADMIN
else if(!superadmin && get_user_flags(plr) & ADMIN_IMMUNITY)
#else
else if(get_user_flags(plr) & ADMIN_IMMUNITY)
#endif
iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "\r%d. \d%s \y[\rImmunity\y]^n", ++a, sName);
else
{
iKeys |= (1 << a++);

if(g_bBlockedChats[plr][bGAG])
iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "\r%d. \w%s \d[\yUngag\d]^n", a, sName);
else if(g_bBlockedChats[plr][bSTATS])
iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "\r%d. \w%s \d[\yLowStats\d]^n", a, sName);
else iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "\r%d. \w%s%s^n", a, sName, VTC_IsClientSpeaking(plr) ? " \d[\rSpeaking\d]" : "");
}
}

if(!g_BlockTimes[g_iMenuInfo[id][SelectTime]])
iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "^n\r8. \wGag\d'\wнуть \rнавсегда^n^n");
else iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "^n\r8. \wGag\d'\wнуть на \y%d \wмин^n^n", g_BlockTimes[g_iMenuInfo[id][SelectTime]]);
}
case MUTE:
{
for(new i = start, sName[32], plr, a; i < end; ++i)
{
plr = g_arrPlayers[id];
get_user_name(plr, sName, charsmax(sName));

if(id == plr)
iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "\r%d. \d%s \y[\rЭто Вы\y]^n", ++a, sName);
else
{
iKeys |= (1 << a++);
iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "\r%d. \w%s%s^n", a, sName, g_iMutePlayer[id][plr] ? " \d[\yMuted\d]" : "");
}
}

iLen += formatex(sMenu[iLen], charsmax(sMenu) - iLen, "^n\r7. \wЗаглушить \rвсех^n\r8. \wСнять Mute со \rвсех^n^n");
}
}

if(end != pnum)
{
formatex(sMenu[iLen], charsmax(sMenu) - iLen, "\r9. \yДалее^n\r0. \r%s", iPos ? "Назад" : "Выход");
iKeys |= MENU_KEY_9;
}
else formatex(sMenu[iLen], charsmax(sMenu) - iLen, "\r0. \r%s", iPos ? "Назад" : "Выход");

show_menu(id, iKeys, sMenu, -1, "UCC Menu");
return PLUGIN_HANDLED;
}

public MenuHandler(id, iKey)
{
switch(iKey)
{
case 6:
{
switch(g_iMenuInfo[id][Menu])
{
case GAG:
{
GagHandler(id, g_arrPlayers[id][g_iMenuInfo[id][Pos] * 7 + iKey], g_BlockTimes[g_iMenuInfo[id][SelectTime]]);
}
case MUTE:
{
arrayset(g_iMutePlayer[id], 1, sizeof g_iMutePlayer[]);
ChatColor(id, 0, MSG_MUTE_ALL_PLAYERS, PREFIX);
}
}
}
case 7:
{
switch(g_iMenuInfo[id][Menu])
{
case GAG:
{
if(++g_iMenuInfo[id][SelectTime] > charsmax(g_BlockTimes))
g_iMenuInfo[id][SelectTime] = 0;

ShowMenu(id, g_iMenuInfo[id][Pos]);
}
case MUTE:
{
arrayset(g_iMutePlayer[id], 0, sizeof g_iMutePlayer[]);
ChatColor(id, 0, MSG_UNMUTE_ALL_PLAYERS, PREFIX);
}
}
}
case 8: ShowMenu(id, ++g_iMenuInfo[id][Pos]);
case 9:
{
if(g_iMenuInfo[id][Pos])
ShowMenu(id, --g_iMenuInfo[id][Pos]);
}
default:
{
switch(g_iMenuInfo[id][Menu])
{
case GAG:
{
GagHandler(id, g_arrPlayers[id][g_iMenuInfo[id][Pos] * 7 + iKey], g_BlockTimes[g_iMenuInfo[id][SelectTime]]);
}
case MUTE:
{
MuteHandler(id, g_arrPlayers[id][g_iMenuInfo[id][Pos] * 6 + iKey]);
}
}
}
}
return PLUGIN_HANDLED;
}

GagHandler(id, player, blocktime)
{
if(!is_user_connected(player))
return;

new sNameAdmin[32], sNamePlayer[32];
get_user_name(id, sNameAdmin, charsmax(sNameAdmin));
get_user_name(player, sNamePlayer, charsmax(sNamePlayer));

if(g_bBlockedChats[player][bGAG])
{
user_unblock(player);

ChatColor(0, player, MSG_CHAT_UNBLOCK_ALL, PREFIX, sNamePlayer, sNameAdmin);
ChatColor(player, 0, MSG_CHAT_UNBLOCK_PL, PREFIX, sNamePlayer, sNameAdmin);
}
else
{
user_block(player, id, blocktime);

new blocktimeinfo[32];
if(!blocktime)
formatex(blocktimeinfo, charsmax(blocktimeinfo), "навсегда");
else formatex(blocktimeinfo, charsmax(blocktimeinfo), "на %d минут", blocktime);

ChatColor(0, player, MSG_CHAT_BLOCK_ALL, PREFIX, sNameAdmin, sNamePlayer, blocktimeinfo);
ChatColor(player, 0, MSG_CHAT_BLOCK_PL, PREFIX, sNamePlayer, sNameAdmin, blocktimeinfo);
}
ShowMenu(id, g_iMenuInfo[id][Pos]);
}

MuteHandler(id, player)
{
if(!is_user_connected(player))
return;

new sNamePlayer[32];
get_user_name(player, sNamePlayer, charsmax(sNamePlayer));

g_iMutePlayer[id][player] = !g_iMutePlayer[id][player];
ChatColor(id, 0, g_iMutePlayer[id][player] ? MSG_MUTE_PLAYER : MSG_UNMUTE_PLAYER, PREFIX, sNamePlayer);

ShowMenu(id, g_iMenuInfo[id][Pos]);
}

user_block(id, admin, blocktime)
{
g_bBlockedChats[id][bGAG] = true;
VTC_MuteClient(id);
client_cmd(id, "-voicerecord");

new iSystime = get_systime();
new szName[32], szIP[16], szAuth[32];
new szAdminName[32], szAdminIP[16], szAdminAuth[32];
g_iBlockExpired[id] = !blocktime ? 0 : iSystime + blocktime * 60;

get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP), 1);
get_user_authid(id, szAuth, charsmax(szAuth));

get_user_name(admin, szAdminName, charsmax(szAdminName));
get_user_ip(admin, szAdminIP, charsmax(szAdminIP), 1);
get_user_authid(admin, szAdminAuth, charsmax(szAdminAuth));

formatex(g_szQuery, charsmax(g_szQuery),
"INSERT INTO `ucc_gag` (`name`, `steamid`, `ip`, `admin_name`, `admin_steamid`, `admin_ip`, `create_time`, `unban_time`) \
VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d') \
ON DUPLICATE KEY UPDATE `name` = '%s', `ip` = '%s', `admin_name` = '%s', `admin_steamid` = '%s', `admin_ip` = '%s', `create_time` = '%d', `unban_time` = '%d'",
szName, szAuth, szIP, szAdminName, szAdminAuth, szAdminIP, iSystime, g_iBlockExpired[id],
szName, szIP, szAdminName, szAdminAuth, szAdminIP, iSystime, g_iBlockExpired[id]
);

g_Data[0] = SAVE_BLOCK;
SQL_ThreadQuery(g_hTuple, "SQL_ThreadsHandler", g_szQuery, g_Data, sizeof(g_Data));
}

user_unblock(id)
{
g_iBlockExpired[id] = -1;
g_bBlockedChats[id][bGAG] = false;
VTC_UnmuteClient(id);

new szIP[16], szAuth[32];
get_user_ip(id, szIP, charsmax(szIP), 1);
get_user_authid(id, szAuth, charsmax(szAuth));

formatex(g_szQuery, charsmax(g_szQuery), "UPDATE `ucc_gag` SET `unban_time` = '-1' WHERE `ip` = '%s' OR `steamid` = '%s'", szIP, szAuth);

g_Data[0] = REMOVE_BLOCK;
SQL_ThreadQuery(g_hTuple, "SQL_ThreadsHandler", g_szQuery, g_Data, sizeof(g_Data));
}

SQL_Init()
{
SQL_SetAffinity("mysql");
g_hTuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_NAME, 1);

new errcode, errstr[128], Handle:hTest = SQL_Connect(g_hTuple, errcode, errstr, charsmax(errstr));
if(hTest == Empty_Handle)
{
#if AMXX_VERSION_NUM < 183
new szError[128]; formatex(szError, charsmax(szError), "[SQL ERROR #%d] %s", errcode, errstr);
set_fail_state(szError);
#else
set_fail_state("[SQL ERROR #%d] %s", errcode, errstr);
#endif
}
else
{
SQL_FreeHandle(hTest);
#if AMXX_VERSION_NUM >= 183
SQL_SetCharset(g_hTuple, "utf8");
#endif
new iClearPeriod = get_systime() - 86400 * CLEAR_PERIOD;
formatex(g_szQuery, charsmax(g_szQuery),
"CREATE TABLE IF NOT EXISTS `ucc_gag` ( \
`id` smallint(6) NOT NULL AUTO_INCREMENT, \
`name` varchar(32) NOT NULL, \
`steamid` varchar(32) NOT NULL, \
`ip` varchar(15) NOT NULL, \
`admin_name` varchar(32) NOT NULL, \
`admin_steamid` varchar(32) NOT NULL, \
`admin_ip` varchar(32) NOT NULL, \
`create_time` int(11) NOT NULL, \
`unban_time` int(11) NOT NULL, \
PRIMARY KEY (`id`), \
UNIQUE KEY `steamid` (`steamid`) \
)ENGINE=InnoDB DEFAULT CHARSET=utf8; \
DELETE FROM `ucc_gag` WHERE (`unban_time` < '%d' AND `unban_time` > '0') OR (`unban_time` = '-1' AND `create_time` < '%d')",
iClearPeriod, iClearPeriod);

g_Data[0] = SQL_INIT;
SQL_ThreadQuery(g_hTuple, "SQL_ThreadsHandler", g_szQuery, g_Data, sizeof(g_Data));
}
}

public SQL_ThreadsHandler(failstate, Handle:query, err[], errcode, data[], datasize)
{
switch(failstate)
{
case TQUERY_CONNECT_FAILED, TQUERY_QUERY_FAILED:
{
log_amx("[SQL ERROR #%d] %s", errcode, err);
return;
}
}

switch(data[0])
{
case SQL_INIT, DROP_TABLE, SAVE_BLOCK, REMOVE_BLOCK: {}
case LOAD_PLAYER:
{
if(SQL_NumResults(query))
{
g_iBlockExpired[data[1]] = SQL_ReadResult(query, 0);

VTC_MuteClient(data[1]);
g_bBlockedChats[data[1]][bGAG] = true;
}
}
}
}

public native_ucc_is_client_gaged(id)
{
if(is_user_connected(id))
return g_bBlockedChats[id][bGAG];

log_error(AMX_ERR_NATIVE, "Client %d not connected or index out of range!", id);
return -1;
}

public native_ucc_set_client_gag(id, admin, blocktime)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "Client %d not connected or index out of range!", id);
return 0;
}
if(!is_user_connected(admin))
admin = 0;

user_block(id, admin, blocktime)
return 1;
}

public plugin_end()
{
SQL_FreeHandle(g_hTuple);
TrieDestroy(g_tAllowCmds);
}
#if defined CHATS_BY_STATS
bool:get_chats_access(id)
{
if(get_user_flags(id) & ADMIN_FLAG)
return true;
#if VOICE_CONTROL_BY_STATS == 0
new st[8], bh[HIT_RIGHTLEG + 1];
if(!get_user_stats(id, st, bh))
return false;
#endif
#if VOICE_CONTROL_BY_STATS == 1
new st[22];
if(csstats_get_user_stats(id, st) <= 0)
return false;
#endif
#if VOICE_CONTROL_BY_STATS == 2
new st[8], bh[HIT_RIGHTLEG + 1];
if(!get_user_stats_sql(id, st, bh))
return false;
#endif
#if VOICE_CONTROL_BY_STATS == 3
new st[1]; st[0] = aes_get_player_level(id);
if((st[0] = aes_get_player_level(id)) == -1)
return false;
#endif
#if defined BLOCK_CHATS_INFO
g_iFragStats[id] = st[0];
#endif
return (st[0] < MIN_FRAGS) ? false : true;
}
#endif
stock ChatColor(id, id2, const szMessage[], any:...)
{
new szMsg[190];
vformat(szMsg, charsmax(szMsg), szMessage, 4);

if(id)
{
client_print_color(id, print_team_default, szMsg);
}
else
{
get_players(pl, pnum, "c");
for(new i; i < pnum; ++i)
{
if(pl != id2)
{
client_print_color(pl, print_team_default, szMsg);
}
}
}
}


Комментарий:
Помогите решить данную проблему.Все работает кроме команды amx_gagmenu и ошибки в логах.
 
В этой теме было размещено решение! Перейти к решению.

Вложения

  • 24.2 KB Просмотры: 736
Сообщения
43
Реакции
14
Помог
3 раз(а)
Если я не ошибаюсь нет VTC: isn't available

Требования:

VTC + ReAPI или VTC + VtcApi
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
Код:
[ 1] AMX Mod X        RUN   -    amxmodx.so        v1.8.2    ini   Start ANY
[ 3] VoiceTranscoder RUN - vtc.so v2017RC3 ini ANY


Модуль VoiceTranscoder должен быть выше модуля AmxModX в списке мета плагинов.
27 Ноя 2017
Хочу заметить, что вы беспечный человек... Зачем же вы в общее обозрение выложили данные для доступа к вашей БД?
 
Сообщения
149
Реакции
6
Помог
1 раз(а)
Minni, понимаете он прописан и так выше ,только вот показывает все ровно 3 им.

linux addons/vtc/dlls/vtc.so
linux addons/amxmodx/dlls/amxmodx.so
linux addons/dproto/dlls/dproto.so
linux addons/semiclip/dlls/semiclip.so
linux addons/whblocker/whblocker_mm_i386.so
linux addons/srdetector/srdetector.so

по поводу данный да сори ,но пароль уже сменен)
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
У вас есть инклюд reapi_vtc?
27 Ноя 2017
Вот, держите, если нету.
 

Вложения

Сообщения
957
Реакции
1,184
Помог
52 раз(а)
1. Уберите ReAPI, он у вас не будет работать.
2. Добавьте инклуд VTC
 

Вложения

Сообщения
149
Реакции
6
Помог
1 раз(а)
Minni, Sonyx, Все ровно не работает команда amx_gagmenu.
и ошибка все так же:

L 11/27/2017 - 20:25:27: [ReAPI] VTC: isn't available
L 11/27/2017 - 20:25:27: [AMXX] Displaying debug trace (plugin "ucc.amxx")
L 11/27/2017 - 20:25:27: [AMXX] Run time error 10: native error (native "VTC_MuteClient")
L 11/27/2017 - 20:25:27: [AMXX] [0] ucc.sma::client_putinserver (line 234)
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
Нужен модуль amxx апи для vtc.
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
dogi2827, а инклюд возьмите из сообщения Sonyx https://dev-cs.ru/threads/1336/#post-13903

Необходимый модуль, который под вашу систему, нужно закинуть сюда: cstrike/addons/amxmodx/modules

И прописать VtcApi в новую строку тут: cstrike/addons/amxmodx/configs/modules.ini
 

Вложения

Сообщения
149
Реакции
6
Помог
1 раз(а)
Minni, прикол в том что не помогло...

[17] VTC AMXX API RUN - VtcApi_amxx_i386 v2017 RC pl1 ANY
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
dogi2827, инклюды удалите из папки с компилятором...
потому что они автоматически подтягиваются, если есть в папке -_-
либо удалите строку #tryinclude <reapi> в исходнике
 
Сообщения
149
Реакции
6
Помог
1 раз(а)
neygomon, удалил строчку #tryinclude <reapi> в исходнике ,теперь ошибка в компилировании.
 

Вложения

  • 109.5 KB Просмотры: 707
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
dogi2827, подсуньте компилятору этот инклюд
 

Вложения

Сообщения
149
Реакции
6
Помог
1 раз(а)
neygomon, тоже самая ошибка что и выше на скрине.
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
dogi2827, #include <VtcApi> допишите
в релизе щас обновлю, забыл :(
 
Сообщения
149
Реакции
6
Помог
1 раз(а)
neygomon,
dogi2827, а инклюд возьмите из сообщения Sonyx https://dev-cs.ru/threads/1336/#post-13903

Необходимый модуль, который под вашу систему, нужно закинуть сюда: cstrike/addons/amxmodx/modules

И прописать VtcApi в новую строку тут: cstrike/addons/amxmodx/configs/modules.ini
получается это можно удалить?
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
dogi2827, нет, ничего не надо удалять
 
Сообщения
149
Реакции
6
Помог
1 раз(а)
neygomon, все ровно не работает меню amx_gagmenu и ошибка в логах...

L 11/27/2017 - 22:50:25: [ReAPI] VTC: isn't available
L 11/27/2017 - 22:50:25: [AMXX] Displaying debug trace (plugin "ucc.amxx")
L 11/27/2017 - 22:50:25: [AMXX] Run time error 10: native error (native "VTC_MuteClient")
L 11/27/2017 - 22:50:25: [AMXX] [0] ucc.sma::client_putinserver (line 234)
27 Ноя 2017
neygomon, точнее вот теперь что пишет:

L 11/27/2017 - 23:16:37: [ReAPI] VTC: isn't available
L 11/27/2017 - 23:16:37: [AMXX] Displaying debug trace (plugin "ucc.amxx")
L 11/27/2017 - 23:16:37: [AMXX] Run time error 10: native error (native "VTC_IsClientSpeaking")
L 11/27/2017 - 23:16:37: [AMXX] [0] ucc.sma::ShowMenu (line 477)
L 11/27/2017 - 23:16:37: [AMXX] [1] ucc.sma::ClCmdGagMenu (line 404)
 
Сообщения
2,713
Реакции
2,993
Помог
59 раз(а)
dogi2827, ожидайте следующего релиза плагина. Автор, на сколько я понял, уберет автоматический подхват инклудов, чтобы уберечь неосознанных пользователей от безаознательного использования.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу