Форум Pawn.Wiki - Воплоти мечту в реальность!: Система мута - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
Система мута как реальзовать

#1
Пользователь офлайн   Tommy7 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Всем привет! Как можно реализовать систему мута? Чтобы когда мут есть, игрок не говорил?
0

#2
Пользователь офлайн   aureliusnull 

  • Местный
  • Вставить ник
  • Раскрыть информацию
.

Сообщение отредактировал aureliusnull: 19 марта 2023 - 06:49

0

#3
Пользователь офлайн   Neekogluv 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияTommy7 (18 марта 2023 - 14:12) писал:

Всем привет! Как можно реализовать систему мута? Чтобы когда мут есть, игрок не говорил?

CMD:mute(playerid, params[])
{
    if(PI[playerid][pAdmin] < 2) return SCM(playerid, COLOR_RED, NO_DOSTUP_TEXT);
    if(!ADuty{playerid}) return SCM(playerid, COLOR_GREY, NO_DUTY_TEXT);
	extract params -> new player:targetid, time, string:reason[30]; else return SCM(playerid, COLOR_RED, !"Èñïîëüçóé: /mute [id] [âðåìÿ] [ïðè÷èíà]");
	if(strlen(reason) > 30) return SCM(playerid, COLOR_RED, !"Íå áîëüøå 30 ñèìâîëîâ!");
    if(targetid == INVALID_PLAYER_ID) return 0;
    if(CheckSlivAdmin(playerid)) return 1;
    if(Osnovat(PN(targetid)) && !Osnovat(PN(playerid))) return SCM(playerid, COLOR_RED, !"Íåëüçÿ âçàèìîäåéñòâîâàòü ñ âëàäåëüöåì!");
	if(time < 1) return SCM(playerid, COLOR_RED, !"Èñïîëüçóé: /mute [id] [âðåìÿ > 1] [ïðè÷èíà]");
    if(targetid == playerid) return SCM(playerid, COLOR_GREY, !"Âû íå ìîæåòå âûäàòü íàêàçàíèå ñàìîìó ñåáå!");
    if(time > 300) return SCM(playerid, COLOR_RED, !"Íåëüçÿ âûäàòü Á× áîëüøå ÷åì íà 300 ìèíóò!");
    if(PI[targetid][pMuteTime] > 0) return SCM(playerid, COLOR_RED, !"Ó ýòîãî èãðîêà óæå åñòü áàí ÷àòà!");
    ASCMToAllf(COLOR_LIGHTRED, "Àäìèíèñòðàòîð %s[%i] çàãëóøèë èãðîêà %s[%i] íà %i ìèíóò. Ïðè÷èíà: %s", PN(playerid), playerid, PN(targetid), targetid, time, reason);
    AntiReAction1(playerid);
    SPDf(targetid, 0, DIALOG_STYLE_MSGBOX, !"", !"Çàêðûòü", !"", !"Âû ïîëó÷èëè áàí ÷àòà, åñëè âû íå ñîãëàñíû ñ ðåøåíèåì Àäìèíèñòðàòîðà, òî íàïèøèòå æàëîáó íà ôîðóì, ïðèëîæèâ äàííûé ñêðèíøîò.\n{2D8E35}%s", ServerCFG[server_forum]);
    PI[targetid][pMuteTime] = time*60;
    SvMutePlayerEnable(targetid);
    UpdatePlayerDataInt(targetid, "MuteTime", PI[targetid][pMuteTime]);
    PI[playerid][pReputation] += 5;
	UpdatePlayerDataInt(playerid, "Reputation", PI[playerid][pReputation]);
    str_1[0] = EOS, f(str_1, sizeof(str_1), "%s[%i] çàãëóøèë èãðîêà %s[%i] íà %i ìèíóò. Ïðè÷èíà: %s", PN(playerid), playerid, PN(targetid), targetid, time, reason);
    SavePunish(0, str_1, targetid);
    return 1;
}

0

#4
Пользователь офлайн   aureliusnull 

  • Местный
  • Вставить ник
  • Раскрыть информацию
const
    INVALID_TIMER_ID = -1,
    MUTE_UPDATE_INTERVAL = 30_000;
    
new
    g_player_mute_time_count[MAX_PLAYERS] = { 0, ... },
    g_player_mute_timer_id[MAX_PLAYERS]   = { INVALID_TIMER_ID, ... };

CMD:mute(playerid, params[]) 
{
    new 
        targetid = INVALID_PLAYER_ID, 
        time;
        
    if (sscanf(params, "ud", targetid, time)) {
       return SendClientMessage(playerid, -1, !"Введите: /mute [ имя / id игрока ] [ минуты ]");
    }

    new unix_mute_time = gettime() + time * 60;
    
    SetPlayerMuteTime(targetid, unix_mute_time);

    InitPlayerMuteTimerID(targetid);
    
    return 1;
}

CMD:unmute(playerid, params[]) 
{
    new targetid = INVALID_PLAYER_ID;

    if (sscanf(params, "u", targetid)) { 
        return SendClientMessage(playerid, -1, !"Введите: /unmute [ имя / id игрока ]");
    }

    if (!IsPlayerMuteTimeGone(playerid)) {
        return SendClientMessage(playerid, -1, !"У игрока не заблокирован доступ в чат.");
    }

    SetPlayerMuteTime(targetid, 0);

    KillPlayerMuteTimerID(targetid);

    SavePlayerMuteTime(targetid);

    return 1;
}

public OnPlayerText(playerid, text[])
{
    if (!IsPlayerMuteTimeGone(playerid)) {
        SendClientMessage(playerid, -1, !"Доступ в чат заблокирован.");
        return 0;
    }
    
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if (!IsPlayerMuteTimeGone(playerid)) {
        SavePlayerMuteTime(playerid);
        
        KillPlayerMuteTimerID(playerid);
        
        SetPlayerMuteTime(playerid, 0);
        SetPlayerMuteTimerID(playerid, INVALID_TIMER_ID);
    }
    
    return 1;
}

@__OnPlayerMuteTimer(const playerid);
@__OnPlayerMuteTimer(const playerid)
{
    SavePlayerMuteTime(playerid);
    
    if (IsPlayerMuteTimeGone(playerid)) {
        KillPlayerMuteTimerID(playerid);
        
        SetPlayerMuteTime(playerid, 0);
        SetPlayerMuteTimerID(playerid, INVALID_TIMER_ID);
        
        SendClientMessage(playerid, -1, !"Время блокировки чата истекло.");
    }
    
    return 1;
}

stock bool: IsMuteTimerValid(const timerid)
{
    return (timerid != INVALID_TIMER_ID);
}

stock GetPlayerMuteTimerID(const playerid)
{
    return g_player_mute_timer_id[playerid];
}

stock SetPlayerMuteTimerID(const playerid, const timerid)
{
    g_player_mute_timer_id[playerid] = timerid;
}

stock InitPlayerMuteTimerID(const playerid)
{
    new timerid = SetTimerEx(
        !"@__OnPlayerMuteTimer",
        MUTE_UPDATE_INTERVAL, 
        true,
        !"d", 
        playerid
    );
    SetPlayerMuteTimerID(playerid, timerid);
    
    return 1;
}

stock KillPlayerMuteTimerID(const playerid)
{
    new timerid = GetPlayerMuteTimerID(playerid);
    
    if (IsMuteTimerValid(timerid)) {
        KillTimer(timerid);
    }
    
    return 1;
}

stock GetPlayerMuteTime(const playerid) 
{
    return g_player_mute_time_count[playerid];
}

stock SetPlayerMuteTime(const playerid, const time) 
{
    g_player_mute_time_count[playerid] = time;
}

stock bool: IsPlayerMuteTimeGone(const playerid)
{
    new 
        mute_time_count = GetPlayerMuteTime(playerid),
        unix_time       = gettime();
        
    return (mute_time_count < unix_time);
}

stock SavePlayerMuteTime(const playerid, const value)
{
    new 
        query_string[60 + (- 2 + 8) + (- 2 + 11) + 1],
        mute_time_count = GetPlayerMuteTime(playerid),
        mute_time_left  = gettime() - mute_time_count;
        
    format(query_string, sizeof query_string,
        "\
            UPDATE \
                /* таблица с игроками */ \
            SET \
                /* столбец в котором будет храниться время мута */=%d \
            WHERE \
                /* имя поля с ид аккаунта игрока в таблице */=%d \
        "
            mute_time_left,
            /* элемент перечисления хранящий ид игрока в базе */
    );
    mysql_tquery(/* ид соединения */, query_string, "", "");

    return (mysql_errno() ? 0 : 1);
}

/* после того, как игрок успешно авторизовался*/
stock LoadPlayerMuteTimeData(const playerid)
{
    new mute_time_left;
    
    cache_get_value_name_int(0, /* столбец в котором будет храниться время мута */, mute_time_left)
    
    if (mute_time_left > 0) {
        new unix_time = gettime();
        
        SetPlayerMuteTime(playerid, unix_time + mute_time_left);
        
        InitPlayerMuteTimerID(playerid);
    }
    
    return 1;
}

1

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика