Всем привет! Как можно реализовать систему мута? Чтобы когда мут есть, игрок не говорил?
Страница 1 из 1
[ Pawn ]
Система мута
как реальзовать
#3
Отправлено 18 марта 2023 - 20:24

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

#4
Отправлено 19 марта 2023 - 06:57

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