valhalla писал(а):Тест плагина v 2.0
Спасибо за тест, пока к сожалению, кроме блокнота ничего нет, так бы перезалил и занялся этим плагином всерьез, но опять же, пока никаких отзывов о нем кроме твоего.
Что касаемо киков за флуд, тут, увы, уже ничего не поделаешь.
Надо переделывать плагин antiflood под плагин AntiChildren, иначе говоря, чтобы antiflood плагин проверял, наказан сейчас игрок порнушкой или нет, если да, то игнорировать его флуд.
Если убрать флуд, то игрок тупо сможет нажать Esc и выйти с сервера.
Поэтому, тут тебе лучше плагин antiflood переделать (позже может добавлю натив, если руки дойдут)
По поводу отсутствия звука при перезаходе...
Попробуй вот так, возможно, volume -1 каким то макаром сбрасывается сама.
- Код: Выделить всё
new const TITLE[] = "FullHD Porn 18+";
new const FILE[] = "antichildren.txt";
new const PREFIX[] = "!t[!gAnti Children!t]";
new const SOUND[] = "sound/antichildren/pornosong.mp3";
new g_iMaxPlayers;
new g_iMenuPlayers[MAX_PLAYERS + 1][MAX_PLAYERS], g_iMenuPosition[MAX_PLAYERS + 1];
new g_iBitUserImmunity;
new g_iBitUserAdmin;
new g_iBitUserAccess;
new GL_szIP[22];
new Trie:g_iBlockListOnMap;
public plugin_init()
{
register_plugin("Anti Children", "0.3 Alpha Fix", "KOTOKU");
register_clcmd("say /antichildren", "Open_JokeMenu");
register_menucmd(register_menuid("Show_JokeMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_JokeMenu");
g_iMaxPlayers = get_maxplayers();
g_iBlockListOnMap = TrieCreate();
}
public plugin_end()
TrieDestroy(g_iBlockListOnMap);
public client_putinserver(id)
{
static iFlags; iFlags = get_user_flags(id);
if(iFlags > 0)
{
if(iFlags & IMMUNI_FLAG && ~(iFlags) & ADMIN_USER) g_iBitUserImmunity |= (1 << id);
if(iFlags & ACCESS_FLAG) g_iBitUserAccess |= (1 << id);
g_iBitUserAdmin |= (1 << id);
}
get_user_ip(id, GL_szIP, charsmax(GL_szIP), 1);
if(TrieKeyExists(g_iBlockListOnMap, GL_szIP))
{
client_cmd(id, ";+voicerecord;MP3Volume 100.0;volume -1");
CinemaFullHD(id + TASK_CINEMA);
set_task(3.0, "CinemaFullHD_Song", id + TASK_SONG, _, _, "b");
}
}
public plugin_precache() precache_generic(SOUND);
public client_disconnect(id)
{
if(g_iBitUserAdmin & (1 << id))
{
g_iBitUserImmunity &= ~(1 << id);
g_iBitUserAdmin &= ~(1 << id);
g_iBitUserAccess &= ~(1 << id);
}
if(task_exists(id + TASK_CINEMA))
{
get_user_ip(id, GL_szIP, charsmax(GL_szIP), 1);
remove_task(id + TASK_CINEMA);
remove_task(id + TASK_SONG);
if(TrieKeyExists(g_iBlockListOnMap, GL_szIP)) return
TrieSetCell(g_iBlockListOnMap, GL_szIP, 1);
}
remove_task(id + TASK_CINEMA);
remove_task(id + TASK_SONG);
}
public Open_JokeMenu(id, iPos)
{
if(iPos < 0 || ~(g_iBitUserAccess) & (1 << id)) return 1;
new iPlayersNum;
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(!is_user_connected(i) || (g_iBitUserImmunity & (1 << i))) continue;
if(i == id) continue;
g_iMenuPlayers[id][iPlayersNum++] = i;
}
new iStart = iPos * PLAYERS_PER_PAGE;
if(iStart > iPlayersNum) iStart = iPlayersNum;
iStart = iStart - (iStart % 8);
g_iMenuPosition[id] = iStart / PLAYERS_PER_PAGE;
new iEnd = iStart + PLAYERS_PER_PAGE;
if(iEnd > iPlayersNum) iEnd = iPlayersNum;
new szMenu[512], iLen, iPagesNum = (iPlayersNum / PLAYERS_PER_PAGE + ((iPlayersNum % PLAYERS_PER_PAGE) ? 1 : 0));
switch(iPagesNum)
{
case 0:
{
UTIL_SayText(id, "%s !yНедостаточно игроков для доступа к меню", PREFIX);
return 1;
}
default: iLen = formatex(szMenu, charsmax(szMenu), "\wКого наказываем? \y[\r18+\y] \w[\d%d\y/\d%d\w]^n^n", iPos + 1, iPagesNum);
}
new szName[32], i, iKeys = (1<<9), b;
for(new a = iStart; a < iEnd; a++)
{
i = g_iMenuPlayers[id][a];
get_user_name(i, szName, charsmax(szName));
iKeys |= (1 << b);
if(g_iBitUserAdmin & (1 << i))
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[\w%d\d] \w%s\r*^n", ++b, szName);
else
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[\w%d\d] \w%s^n", ++b, szName);
}
for(new i = b; i < PLAYERS_PER_PAGE; i++) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
if(iEnd < iPlayersNum)
{
iKeys |= (1 << 8);
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\d[\w0\d] \wДальше^n\d[\w0\d] \w%s", id, iPos ? "Назад" : "Выход");
}
else formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\d[\w0\d] \w%s", iPos ? "Назад" : "Выход");
return show_menu(id, iKeys, szMenu, -1, "Show_JokeMenu");
}
public Handle_JokeMenu(id, iKey)
{
switch(iKey)
{
case 8: Open_JokeMenu(id, ++g_iMenuPosition[id]);
case 9: Open_JokeMenu(id, --g_iMenuPosition[id]);
default:
{
new iTarget = g_iMenuPlayers[id][g_iMenuPosition[id] * PLAYERS_PER_PAGE + iKey];
new szName[32]; get_user_name(iTarget, szName, charsmax(szName));
if(is_user_connected(iTarget))
{
client_cmd(iTarget, ";+voicerecord;MP3Volume 100.0;volume -1");
CinemaFullHD(iTarget + TASK_CINEMA);
CinemaFullHD_Song(iTarget + TASK_SONG);
UTIL_SayText(0, "%s !yИгрок !g%s!y был наказан, этот игрок был !t%s", PREFIX, szName, (g_iBitUserAdmin & (1 << iTarget)) ? "с привилегиями" : "обычным, без привилегий");
UTIL_SayText(id, "%s !yВы наказали игрока !g%s!y, этот игрок был !t%s", PREFIX, szName, (g_iBitUserAdmin & (1 << iTarget)) ? "с привилегиями" : "обычным, без привилегий");
}
else
{
UTIL_SayText(id, "%s !yЭтот игрок отключился от сервера!", PREFIX);
Open_JokeMenu(id, g_iMenuPosition[id]);
}
}
}
return 1;
}
public CinemaFullHD(id)
{
id -= TASK_CINEMA;
client_cmd(id, ";escape;cancelselect");
show_motd(id, FILE, TITLE);
if(is_user_alive(id))
ExecuteHamB(Ham_Killed, id, id, 2);
set_task(1.2, "CinemaFullHD", id + TASK_CINEMA, _, _, "b");
}
public CinemaFullHD_Song(id)
{
id -= TASK_SONG;
client_cmd(id, "mp3 play %s", SOUND)
set_task(11.0, "CinemaFullHD_Song", id + TASK_SONG, _, _, "b");
}
stock UTIL_SayText(id, const szMessage[], any:...)
{
new szBuffer[190];
if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
else copy(szBuffer, charsmax(szBuffer), szMessage);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
switch(id)
{
case 0:
{
for(new id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_connected(id)) continue;
message_begin(MSG_ONE_UNRELIABLE, MSG_SayText, {0, 0, 0}, id);
write_byte(id);
write_string(szBuffer);
message_end();
}
}
default:
{
if(id && id <= g_iMaxPlayers)
{
if(is_user_connected(id))
{
message_begin(MSG_ONE_UNRELIABLE, MSG_SayText, {0, 0, 0}, id);
write_byte(id);
write_string(szBuffer);
message_end();
}
}
}
}
}
Добавлено спустя 8 минут 32 секунды:Пришли мне свой плагин antiflood в лс, я тебе плагин под него сделаю.