PDA

Просмотр полной версии : [Вопрос] команда /makeadmin



Angeeel
28.12.2017, 22:56
Всем привет.

Помогите написать команду

Описание работы команды

При вводе команды(/makeadmin id/name lvl), если игрок в сети выдаем админку и записываем в таблицу с админами или обновляем lvl(если lvl 0, удаляем из таблицы). Если игрок не в сети и он админ, то при вводе его ника отправляем запрос в бд, проверяем на наличие админа в таблице. Если он есть в таблице, то меняем lvl(если lvl 0 удаляем из таблицы).

Вопрос

Как использовать и id и ник в команде?

Например если игрок в онлайне, то работал и id и ник, а если в оффлайне, то только ник.

Ник нужен для запроса в бд.


CMD:makeadmin(playerid,params[]){
if(PlayerLogged[playerid] == 0) return true;
if(PlayerInfo[playerid][Admin] < 10 || AdminLogged[playerid] == false) return true;
if(sscanf(params, "ud", params[0], params[1]))
return SendClientMessage(playerid, CGREY, "Используйте: /makeadmin [id/ник игрока] [уровень]");
if(params[1] < 0 || params[1] > 10)
return SendClientMessage(playerid, CGREY, "Уровень от 0 до 10");
if(!IsPlayerConnected(params[0])){
new query_string[128];
format(query_string, sizeof(query_string), "SELECT * FROM `admins` WHERE `admin` = '%s' LIMIT 1", params[0]);
mysql_tquery(database_connect, query_string, "Makeadmin", "isd", playerid, params[0], params[1]);
return true;
}else{
if(params[1] == 0){
new query_string[128];
format(query_string, sizeof(query_string), "DELETE FROM `admins` WHERE `admin`='%s'", PlayerInfo[params[0]][Name]);
mysql_tquery(database_connect, query_string, "", "");
static const fmt_str[] = "{FFFFFF}Вы выдали админку i уровня игроку %s[%d]";
new string[sizeof(fmt_str)+2+MAX_PLAYER_NAME+4];
format(string, sizeof(string), fmt_str, params[1], PlayerInfo[params[0]][Name], playerid);
SendClientMessage(playerid, -1, string);
static const fmt_str_1[] = "{FFFFFF}%s выдал Вам %i уровень администратора";
new string_1[sizeof(fmt_str_1)+MAX_PLAYER_NAME+2];
format(string_1, sizeof(string_1), fmt_str_1, PlayerInfo[playerid][Name], params[1]);
SendClientMessage(params[0], -1, string_1);
return true;
}
if(PlayerInfo[params[0]][Admin] == 0){
new reg[30], ig[30], ip[16];
GetPlayerIp(playerid, ip, 16);
new sec, minut, hour, day, month, year;
gettime(hour, minut, sec);
getdate(year, month, day);
new data[30];
format(keke, sizeof(keke), "%i,%i,%i,%i,%i,%i", year, month, day, hour, minut, sec);
format(reg, 30, data);
format(ig, 30, data);
new query_string[+3+MAX_PLAYER_NAME+MAX_PLAYER_NAME+30+30+16];
format(query_string, sizeof(query_string), ""INSERT INTO `admins` (`lvl`, `admin`, `whoadmin`, `reg`, `ig`, `ip`) VALUES ('%d', '%s', '%s', '%s', '%s', '%s')"", params[1], PlayerInfo[params[0]][Name], PlayerInfo[playerid][Name], reg, ig, ip);
mysql_tquery(database_connect, query_string, "", "");
static const fmt_str[] = "{FFFFFF}Вы выдали админку %i игроку %s";
new string[sizeof(fmt_str)+2+MAX_PLAYER_NAME+4];
format(string, sizeof(string), fmt_str, params[1], PlayerInfo[params[0]][Name]);
SendClientMessage(playerid, -1, string);
static const fmt_str_1[] = "{FFFFFF}%s выдал Вам %i уровень администратора";
new string_1[sizeof(fmt_str_1)+MAX_PLAYER_NAME+2];
format(string_1, sizeof(string_1), fmt_str_1, PlayerInfo[playerid][Name], params[1]);
SendClientMessage(params[0], -1, string_1);
PlayerInfo[params[0]][Admin] = params[1];
}else{
new query_string[+2+24];
format(query_string, sizeof(query_string), "UPDATE `admins` SET `lvl` = '%d' WHERE `admin` = '%s' LIMIT 1", params[1], PlayerInfo[params[0]][Name]);
mysql_tquery(database_connect, query_string, "", "");
static const fmt_str[] = "{FFFFFF}Вы выдали админку %i уровня игроку %s";
new string[sizeof(fmt_str)+2+MAX_PLAYER_NAME+4];
format(string, sizeof(string), fmt_str, params[1], PlayerInfo[params[0]]);
SendClientMessage(playerid, -1, string);
static const fmt_str_1[] = "{FFFFFF}%s выдал Вам %i уровень администратора";
new string_1[sizeof(fmt_str_1)+MAX_PLAYER_NAME+2];
format(string_1, sizeof(string_1), fmt_str_1, PlayerInfo[playerid][Name], params[1]);
SendClientMessage(params[0], -1, string_1);
PlayerInfo[params[0]][Admin] = params[1];
}
}
return true;
}

запрос в бд

function Makeadmin(playerid,giveplayerid[],level){
new stringer[128], lvlva[2];
new rows;
cache_get_row_count(rows);
if(!rows){
SendClientMessage(playerid, CGREY, "Нет такого администратора");
}else{
cache_get_value_name(0, "lvl", lvlva);
if(strval(lvlva) != 0){
if(level == 0){
format(stringer, 128, "DELETE FROM `admins` WHERE `admin`='%s'", giveplayerid);
mysql_tquery(database_connect, stringer, "", "");
static const fmt_str[] = "{FFFFFF}%s выдан уровень администратора: %i";
new string[sizeof(fmt_str)-2+2-2+MAX_PLAYER_NAME-2+4];
format(string, sizeof(string), fmt_str, giveplayerid, level);
SendClientMessage(playerid, -1, string);
}else{
format(stringer, 128, "UPDATE `admins` SET `lvl` = '%d' WHERE `admin` = '%s' LIMIT 1", level, giveplayerid);
mysql_tquery(database_connect, stringer, "", "");
static const fmt_str[] = "{FFFFFF}%s выдан уровень администратора: %i";
new string[sizeof(fmt_str)-2+2-2+MAX_PLAYER_NAME-2+4];
format(string, sizeof(string), fmt_str, giveplayerid, level);
SendClientMessage(playerid, -1, string);
}
}
}
return true;
}

DeimoS
29.12.2017, 10:09
sscanf(params, "s[24]", nickname);
if(IsNumeric(nickname))
{
new giveplayerid = strval(nickname);
if(!IsPlayerConnected(giveplayerid))
return SendClientMessage(playerid, -1, "Игрок не найден");
//Всё остальное, связанное с ID
}
else
{
//Всё связанное с введённым ником, что хранится в nickname
}

Angeeel
29.12.2017, 13:16
Все работает, спасибо)