Русское сообщество по скриптингу

[AntiChildren] Punish Cheater 18+

Утвержденные плагины для AMX Mod X администратором/модератором форума.

Модератор: Leonidddd

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только работоспособных плагинов для AMX Mod X. Новые плагины нужно выкладывать в разделе "Новые плагины".

Re: [AntiChildren] Punish Cheater 18+

Сообщение KOTOKU » 01 ноя 2017, 01:57

Самое смешное в другом, если бы не мой косяк, вместо idTarget написал id в наказании, то этого видоса бы не было :)
Фишка в том, что звуки воспроизводились у того, кто наказывал, а картинка показывалась тому, кто был наказан, отсюда и стоны на видео у Админа :-)
Уже исправил это
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: [AntiChildren] Punish Cheater 18+

Сообщение valhalla » 06 ноя 2017, 21:01

Тест плагина v 2.0 :)
Аватара пользователя
valhalla
 
Сообщения: 4
Зарегистрирован: 26 окт 2017, 01:15
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: [AntiChildren] Punish Cheater 18+

Сообщение KOTOKU » 16 ноя 2017, 01:28

valhalla писал(а):Тест плагина v 2.0 :)


Спасибо за тест, пока к сожалению, кроме блокнота ничего нет, так бы перезалил и занялся этим плагином всерьез, но опять же, пока никаких отзывов о нем кроме твоего.

Что касаемо киков за флуд, тут, увы, уже ничего не поделаешь.
Надо переделывать плагин antiflood под плагин AntiChildren, иначе говоря, чтобы antiflood плагин проверял, наказан сейчас игрок порнушкой или нет, если да, то игнорировать его флуд.
Если убрать флуд, то игрок тупо сможет нажать Esc и выйти с сервера.
Поэтому, тут тебе лучше плагин antiflood переделать (позже может добавлю натив, если руки дойдут)

По поводу отсутствия звука при перезаходе...
Попробуй вот так, возможно, volume -1 каким то макаром сбрасывается сама.


Код: Выделить всё
#include <amxmodx>
#include <hamsandwich>

#define MAX_PLAYERS            32
// Флаг доступа к меню 
#define ACCESS_FLAG            ADMIN_BAN
// Флаг иммунитета
#define IMMUNI_FLAG            ADMIN_IMMUNITY


#define PLAYERS_PER_PAGE    8

// Ignore the player who opens the menu? If not, comment out the line
#define    IGNORE_WHO_OPENS

// Show a player's punishment message to everyone? If not, comment out the line
#define SHOW_PUNISH_MSG_ALL

// Show the blocked player the MOTD when reconnect the server (on map)? If not, comment out the line
#define SAVE_BLOCK_IP_ON_MAP


#define TASK_CINEMA        100
#define TASK_SONG        200

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;

#if defined SAVE_BLOCK_IP_ON_MAP
new GL_szIP[22];
new Trie:g_iBlockListOnMap;
#endif

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();
    
    
#if defined SAVE_BLOCK_IP_ON_MAP
    g_iBlockListOnMap = TrieCreate();
    #endif
}

#if defined SAVE_BLOCK_IP_ON_MAP
public plugin_end()
    TrieDestroy(g_iBlockListOnMap);
#endif

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 |= (<< id);
        g_iBitUserAdmin |= (1  <<  id);
    }
    
    
#if defined SAVE_BLOCK_IP_ON_MAP
    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");
    }
    #endif
}

public plugin_precache() precache_generic(SOUND);
    
public client_disconnect
(id)
{
    if(g_iBitUserAdmin & (1  <<  id))
    {
        g_iBitUserImmunity &= ~(1  <<  id);
        g_iBitUserAdmin &= ~(<< id);
        g_iBitUserAccess &= ~(<< id);
    }

    #if defined SAVE_BLOCK_IP_ON_MAP
    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);
    }
    #elseif
    remove_task(id + TASK_CINEMA);
    remove_task(id + TASK_SONG);
    #endif
}

public Open_JokeMenu(id, iPos)
{
    if(iPos < 0 || ~(g_iBitUserAccess) & (<< id)) return 1;
    
    new iPlayersNum
;
    for(new i = 1; i <= g_iMaxPlayers; i++)
    {
        if(!is_user_connected(i) || (g_iBitUserImmunity & (1  <<  i))) continue;
        #if defined IGNORE_WHO_OPENS
        if(== id) continue;
        #endif
        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 |= (<< 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 |= (<< 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);
                #if defined SHOW_PUNISH_MSG_ALL
                    UTIL_SayText(0, "%s !yИгрок !g%s!y был наказан, этот игрок был !t%s", PREFIX, szName, (g_iBitUserAdmin & (1  <<  iTarget)) ? "с привилегиями" : "обычным, без привилегий");
                #else 
                    UTIL_SayText(id, "%s !yВы наказали игрока !g%s!y, этот игрок был !t%s", PREFIX, szName, (g_iBitUserAdmin & (1  <<  iTarget)) ? "с привилегиями" : "обычным, без привилегий");
                #endif
            }
            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");
}

#define MSG_SayText     76
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 в лс, я тебе плагин под него сделаю.
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: [AntiChildren] Punish Cheater 18+

Сообщение KOTOKU » 12 фев 2018, 17:21

Шапка обновлена, местами обновил код.
Буду благодарен за отзывы, пока не тестировал :-)
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: [AntiChildren] Punish Cheater 18+

Сообщение fearss1993 » 15 фев 2018, 10:52

я чуток нубок, мог бы ты сделать так чтобы игроков не кикало, а то после использования на игрке через меню наказания, оно пишет сообщения и сразу выкидывает из сервреа.
Мне надо чтобы все слышали что у него за звук играет и не выкидывало его из сервера. А так же меню работает через время, и если можно иммунитет убрать у админов, вообще его не ставить. Кстати еще после приминения пишет что у игркоа была привилегия, хотя у него её не было
Аватара пользователя
fearss1993
 
Сообщения: 1
Зарегистрирован: 15 фев 2018, 10:15
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: [AntiChildren] Punish Cheater 18+

Сообщение KOTOKU » 15 фев 2018, 14:23

а сколько игроков было на сервере на момент тестов?
Выкидывает потому что канал связи слабый у игрока, меню должно стабильно рабоать

Добавлено спустя 15 минут 58 секунд:
аа пардон, мой косяк, по поводу непривилегированного игрока, это правда.
Забыл добавить проверку на USER флаг, щас исправим
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: [AntiChildren] Punish Cheater 18+

Сообщение KOTOKU » 17 фев 2018, 17:46

Шапка обновлена, добавил 0.4 версию:
[+] Появилась возможность настраивать промежуток времени показа MOTD картинки (если игроков выкидывает с overflowed channel, то можно увеличить это значение)
[+] Исправлен баг с отображением всех игроков, как пользователь с привилегиями
[+] Немного оптимизирован плагин в плане переполнения каналов связи
[+] Добавлена возможность отключать иммунитеты

Кто потестит, отпишитесь.
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: [AntiChildren] Punish Cheater 18+

Сообщение dsad_20_18 » 22 окт 2018, 17:40

у меня не работает ввожу команду и не чего не происходит
Аватара пользователя
dsad_20_18
 
Сообщения: 1
Зарегистрирован: 22 окт 2018, 17:25
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Пред.

Вернуться в Утвержденные плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 9