Приветствую. Вот сделал тебе код:
CMD:offmute(playerid, params[])
{
if(GetPlayerAdminEx(playerid) < 3) return 1;
if(GetPlayerData(playerid, P_ADMIN_LOGGED) == 0) return 1;
if(!strlen(params)) return SendClientMessage(playerid, 0xCECECEFF, "{FFA500}• Используйте: {FFFFFF}/offmute [ник игрока] [время] [причина]");
extract params -> new string: player_name[30], mute_time;
if(!(1 <= mute_time <= 500)) return SendClientMessage(playerid, 0xCECECEFF, "{FF0000}* {FFFFFF}Время должно быть не меньше 1 и не больше 500 минут.");
if(IsPlayerConnected(GetPlayerID(player_name))) return SendClientMessage(playerid, 0x999999FF, "{FF0000}* {FFFFFF}Игрок с таким именем находится на сервере.");
SetPVarString(playerid, "offmute_name", player_name);
SetPVarInt(playerid, "offmute_min", mute_time);
new query[144],
Cache: result,
rows,
uid,
admin,
mute;
mysql_format(mysql, query, sizeof query, "SELECT id, admin, mute FROM accounts WHERE name='%s' LIMIT 1", player_name);
mysql_tquery(mysql, query, "FindPlayerForMute", "i", playerid);
return 1;
}
forward FindPlayerForMute(playerid);
public FindPlayerForMute(playerid) {
new rows;
cache_get_row_count(rows);
if(!rows) {
DeletePVar(playerid, "offmute_name");
DeletePVar(playerid, "offmute_min");
return SendClientMessage(playerid, 0x999999FF, "{FF0000}* {FFFFFF}Игрок с таким ником не найден.");
}
new uuid, player_name[MAX_PLAYER_NAME], mute_time, currmute, admin;
cache_get_value_name_int(0, "id", uuid);
cache_get_value_name_int(0, "mute", currmute);
cache_get_value_name_int(0, "admin", admin);
if(GetPlayerAdminEx(playerid) < admin) {
DeletePVar(playerid, "offmute_name");
DeletePVar(playerid, "offmute_min");
return SendClientMessage(playerid, 0x999999FF, "{FF0000}* {FFFFFF}Нельзя выдать мут администратору старше..");
}
if(currmute > 0) {
DeletePVar(playerid, "offmute_name");
DeletePVar(playerid, "offmute_min");
return SendClientMessage(playerid, 0x999999FF, "{FF0000}* {FFFFFF}Игрок уже имеет мут.");
}
SetPVarInt(playerid, "offmute_uuid", uuid);
GetPVarString(playerid, "offmute_name", player_name, MAX_PLAYER_NAME);
mute_time = GetPVarInt(playerid, "offmute_min");
static const dlg_fmt[] = "{FFFFFF}Вы действительно желаете {FFFF00}Выдать блокировку чата{FFFFFF}?\n\n\
Ник: {64F164}%s\n{FFFFFF}Номер аккаунта: {FFFF00}%d\n\n{FFFFFF}Сроком на: {64F164}%d минут";
new dlg[sizeof dlg_fmt + (-6) + MAX_PLAYER_NAME + 11 + 3];
format(dlg, sizeof dlg, dlg_fmt, player_name, uuid, mute_time);
ShowPlayerDialog(playerid, 111, DIALOG_STYLE_MSGBOX, "{FFFFFF}Подтверждение", dlg, "Да", "Нет");
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
switch(dialogid) {
case 111: {
if(!response) {
DeletePVar(playerid, "offmute_name");
DeletePVar(playerid, "offmute_min");
DeletePVar(playerid, "offmute_uuid");
return 1;
}
new query[69 + (-6) + MAX_PLAYER_NAME * 2 + 3 + 1], player_name[MAX_PLAYER_NAME], mute_time, uuid;
GetPVarString(playerid, "offmute_name", player_name, MAX_PLAYER_NAME);
mute_time = GetPVarInt(playerid, "offmute_min");
uuid = GetPVarInt(playerid, "offmute_uuid");
format(query, sizeof query, "{8B0000}[М] Администратор %s выдал мут оффлайн игроку %s на %d минут.", GetPlayerNameEx(playerid), player_name, mute_time);
SendClientMessageToAll(0xFF99AADD, query);
AddPlayerData(playerid, P_ASTATSMUTE, +, 1);
UpdatePlayerDatabaseInt(playerid, "astats mute",
GetPlayerData(playerid, P_ASTATSMUTE));
SavePlayerAccount(playerid);
format(query, sizeof query, "%s[%d] выдал оффлайн мут игроку %s[%d] на %d мин.", GetPlayerNameEx(playerid), GetPlayerAccountID(playerid), player_name, uuid, mute_time);
SendLog(playerid, LOG_TYPE_ADMIN_ACTION, query);
mysql_format(mysql, query, sizeof query, "UPDATE accounts SET mute='%d' WHERE id='%d' LIMIT 1", mute_time * 60, uuid);
mysql_tquery(mysql, query, "", "");
}
}
return 1;
}
Я в OnDialogResponse использовал структуру switch...case, если у тебя через if(dialogid) то вот OnDialogResponse под if:
Не советую использовать mysql_query, т.к. пока он ожидает ответа от бд - сервер /встаёт/, из-за чего могут быть заметные провисания у игроков.
Так-же советую использовать LIMIT 1 в запросах, если знаешь что у тебя может быть только максимум 1 запись. Т.к. запрос SELECT и UPDATE будет искать все возможные варианты, а т.к. у тебя может быть только один аккаунт с одним никнеймом - нет смысла делать лишний поиск по базе.