Dmitriy Makarov
Умник
Привет.
Делал команды /mute, /unmute. Сами команды работают нормально, но есть проблема, из-за которого случается следующее:
При входе в игру, если у человека нету на аккаунте мута, то ему после коннекта на сервер пишет, мол, срок действия блокировки чата истёк и т.п, ну в общем, то, что пишет когда мут спадает сам.
Писал на другом форуме, они почему-то меня обосрали из-за незнания основ.
Помогите, пожалуйста.
Вот фулл код, связанный с мутом:
Делал команды /mute, /unmute. Сами команды работают нормально, но есть проблема, из-за которого случается следующее:
При входе в игру, если у человека нету на аккаунте мута, то ему после коннекта на сервер пишет, мол, срок действия блокировки чата истёк и т.п, ну в общем, то, что пишет когда мут спадает сам.
Писал на другом форуме, они почему-то меня обосрали из-за незнания основ.
Помогите, пожалуйста.
Вот фулл код, связанный с мутом:
C++:
new MuteTimer[MAX_PLAYERS]; // Переменная в начале мода
// stock LoadDataFromDataBase, где берётся информация об аккаунте с Базы Данных
cache_get_value_name_int(0, "Mute", pInfo[playerid][pMute]);
MuteTimer[playerid] = SetTimerEx("MuteSecondTimer", 1000, true, "d", playerid);
// Сама проблема вот здесь. При входе на сервер, если у меня нету мута, то срабатывает 1-е условие
forward MuteSecondTimer(playerid);
public MuteSecondTimer(playerid)
{
if(pInfo[playerid][pMute] == 0)
{
SCM(playerid, COLOR_LIMEGREEN, "Срок действия блокировки чата истёк. Доступ в чат разблокирован");
KillTimer(MuteTimer[playerid]);
new query[72];
format(query, sizeof(query), "UPDATE `users` SET `Mute` = '%d' WHERE `ID` = '%d' LIMIT 1", pInfo[playerid][pMute], pInfo[playerid][pID]);
mysql_tquery(dbHandle, query);
}
if(pInfo[playerid][pMute] > 0) pInfo[playerid][pMute]--;
return 1;
}
// OnPlayerDisconnect
KillTimer(MuteTimer[playerid]);
// Сами команды /mute, /unmute
CMD:mute(playerid, params[])
{
if(pInfo[playerid][pAdmin] < 2) return 1;
new string[128];
if(sscanf(params, "dds[128]", params[0], params[1], params[2])) return SCM(playerid, COLOR_GREY, "Используйте: /mute [ID] [Время] [Причина]");
if(!IsPlayerConnected(params[0])) return SCM(playerid, COLOR_GREY, "Игрока с таким ID нет на сервере");
if(params[1] < 1 || params[1] > 300) return SCM(playerid, COLOR_GREY, "Время не должно быть меньше 1 и выше 300");
if(pInfo[params[0]][pMute] != 0) return SCM(playerid, COLOR_GREY, "У этого игрока уже заблокирован чат");
pInfo[params[0]][pMute] = params[1] * 60;
format(string, sizeof(string), "Администратор %s выдал блокировку чата игроку %s на %d мин. Причина: %s", pInfo[playerid][pName], pInfo[params[0]][pName], params[1], params[2]);
SCMTA(COLOR_LIGHTRED, string);
SCM(params[0], 0xDF5402FF, "Доступ в чат заблокирован. Чтобы узнать время до разблокировки чата, введите /mtime");
new query[74];
format(query, sizeof(query), "UPDATE `users` SET `Mute` = '%d' WHERE `id` = '%d' LIMIT 1", pInfo[params[0]][pMute], pInfo[params[0]][pID]);
mysql_tquery(dbHandle, query);
MuteTimer[playerid] = SetTimerEx("MuteSecondTimer", 1000, true, "d", playerid);
return 1;
}
CMD:unmute(playerid, params[])
{
if(pInfo[playerid][pAdmin] < 2) return 1;
new string[128];
if(sscanf(params, "ds[128]", params[0], params[1])) return SCM(playerid, COLOR_GREY, "Используйте: /unmute [ID] [Причина]");
if(!IsPlayerConnected(params[0])) return SCM(playerid, COLOR_GREY, "Игрока с таким ID нет на сервере");
if(pInfo[params[0]][pMute] == 0) return SCM(playerid, COLOR_GREY, "У этого игрока не заблокирован чат");
format(string, sizeof(string), "Администратор %s снял блокировку чата с игрока %s. Причина: %s", pInfo[playerid][pName], pInfo[params[0]][pName], params[1]);
SCMTA(COLOR_LIGHTRED, string);
SCM(params[0], COLOR_LIMEGREEN, "Доступ в чат разблокирован");
pInfo[params[0]][pMute] = 0;
new query[69];
format(query, sizeof(query), "UPDATE `users` SET `Mute` = '%d' WHERE `id` = '%d' LIMIT 1", pInfo[params[0]][pMute], pInfo[params[0]][pID]);
mysql_tquery(dbHandle, query);
return 1;
}
