Вопросы

Добавил команду /makeadmin (взял с форума), в игре выдаю игроку админку, ему пишет "Вы были назначены администратором %d уровня. Назначил: %s." А в базу в таблицу "admin" не добавляет, и команда /alogin не работает. Как добавить что бы при прописывании /makeadmin игроку предлагалось ввести пароль от админки и добавляло в базу?

Поделиться сообщением


Ссылка на сообщение

17 ответов на этот вопрос

  • 0

@ShHyp0k Значит, вам нужно добавлять в базу данных через INSERT INTO. https://sql-language.ru/insert.html -- вот здесь можно посмотреть с примерами. 

Поделиться сообщением


Ссылка на сообщение
  • 0

А где сама команда?

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Андрей Лазарев Сорян, забыл xD

CMD:makeadmin(playerid, params[])
{
	if (pInfo[playerid][pAdmin] < 8)
		return SendClientMessage(playerid, 0xFFFF00FF, !"Команда доступна с 8 уровня администратора");
	extract params -> new id, lvl; else
		return SendClientMessage(playerid, 0xFFFF00FF, !"[!]{DEDEDE} Используйте: /makeadmin [playerid] [уровень]");
	if (!IsPlayerConnected(id))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Игрока нет в сети.");
	if (!(1 <= lvl <= 8))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Уровень должен быть не менее 1 и не более 8!");

	pInfo[id][pAdmin] = lvl;

	static const
		fmt_str[] = "Вы были назначены администратором %d уровня. Назначил: %s.",
		fmt_str_2[] = "Вы назначили игрока %s, администратором %d уровня.";
	static
		string[sizeof fmt_str + MAX_PLAYER_NAME + 2 - 2*2];

	format(string, sizeof string, fmt_str, lvl, pInfo[playerid][pName]);
	SendClientMessage(id, 0x9EC73DAA, string);
	format(string, sizeof string, fmt_str_2, pInfo[id][pName], lvl);
	SendClientMessage(playerid, 0x9EC73DAA, string);

	return 1;
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0
3 минуты назад, ShHyp0k сказал:

@Андрей Лазарев Сорян, забыл xD


CMD:makeadmin(playerid, params[])
{
	if (pInfo[playerid][pAdmin] < 8)
		return SendClientMessage(playerid, 0xFFFF00FF, !"Команда доступна с 8 уровня администратора");
	extract params -> new id, lvl; else
		return SendClientMessage(playerid, 0xFFFF00FF, !"[!]{DEDEDE} Используйте: /makeadmin [playerid] [уровень]");
	if (!IsPlayerConnected(id))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Игрока нет в сети.");
	if (!(1 <= lvl <= 8))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Уровень должен быть не менее 1 и не более 8!");

	pInfo[id][pAdmin] = lvl;

	static const
		fmt_str[] = "Вы были назначены администратором %d уровня. Назначил: %s.",
		fmt_str_2[] = "Вы назначили игрока %s, администратором %d уровня.";
	static
		string[sizeof fmt_str + MAX_PLAYER_NAME + 2 - 2*2];

	format(string, sizeof string, fmt_str, lvl, pInfo[playerid][pName]);
	SendClientMessage(id, 0x9EC73DAA, string);
	format(string, sizeof string, fmt_str_2, pInfo[id][pName], lvl);
	SendClientMessage(playerid, 0x9EC73DAA, string);

	return 1;
}

 

Попробуй замени 

pInfo[id][pAdmin] = lvl;

на вот это

pInfo[playerid][pAdmin] = lvl;

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Андрей Лазарев теперь админку выдает мне 1 лвл, хотя прописываю игроку другому. Но после перезахода у меня опять фулл, потому что в базу не прописывает её. Как сделать что бы в базу прописывало?

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@ShHyp0k Найти процедуру сохранения данных, вряд ли это делается "сырыми" запросами в готовом моде. Поищите как это реализовано в других командах / процедурах своего мода. 

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST В команде "sban" это реализовано так

mysql_query_string[0] = EOS;
	format(mysql_query_string, sizeof(mysql_query_string), "INSERT INTO "T_BANS" (name,whobanned,ip,bandate,time,unbandate,reason) VALUES ('%s','%s','%s',CURDATE(),%d,CURDATE() + INTERVAL %i DAY,'%s')", GetName(params[0]), GetName(playerid), pInfo[params[0]][pIP], params[1], params[1], params[2]);
	mysql_tquery(dbHandle, mysql_query_string, "", "");
	Kick(params[0]);
	return 1;

Как добавить сохранение данных в команду makeadmin? 

 

upd: команда sban full

CMD:sban(playerid, params[])
{
	IsAdmin(ADM_OLDER_ADMIN);
	else if(!gAdminLogged[playerid]) return SendClientMessage(playerid, COLOR_GREY, YouAreNotLoggedInAsAdmin);
	else if(sscanf(params, "dds[32]", params[0], params[1], params[2])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /sban [id игрока] [кол-во дней] [причина]");
	else if(params[0] == INVALID_PLAYER_ID || params[0] == playerid) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotOnline);
	else if(!gPlayerLogged[params[0]]) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotAuthorized);
    else if(pInfo[playerid][pAdmin] <= pInfo[params[0]][pAdmin]) return AttemptRemoveAdmin(playerid, "тихо забанить", params[0]);
    else if(IsAIP(params[2])) return 0;
	else if(CheckString(params[2], 1)) return AdminAntisliv(playerid, params[2]);
	else if(!(1 <= params[1] <= 30)) return SendClientMessage(playerid, COLOR_GREY, "Количество дней от 1 до 30!");
    LeaveFractionPlayer(params[0]);
	new string[128];
    if(pInfo[playerid][pAdmin] < ADM_FOUNDER)
 	{
		format(string, sizeof(string), "[A] %s[%d] тихо забанил игрока %s на %d дней. Причина: %s", GetName(playerid), playerid, GetName(params[0]), params[1], params[2]);
		SendAdminMessage(COLOR_FADE1, string);
	}
	else
	{
	    format(string, sizeof(string), "Вы тихо забанили игрока %s на %d дней. Причина: %s", GetName(params[0]), params[1], params[2]);
	    SendClientMessage(playerid, COLOR_YELLOW, string);
	}
	mysql_query_string[0] = EOS;
	format(mysql_query_string, sizeof(mysql_query_string), "INSERT INTO "T_BANS" (name,whobanned,ip,bandate,time,unbandate,reason) VALUES ('%s','%s','%s',CURDATE(),%d,CURDATE() + INTERVAL %i DAY,'%s')", GetName(params[0]), GetName(playerid), pInfo[params[0]][pIP], params[1], params[1], params[2]);
	mysql_tquery(dbHandle, mysql_query_string, "", "");
	Kick(params[0]);
	return 1;
}

 

Отредактировано пользователем ShHyp0k
Причина: добавил команду

Поделиться сообщением


Ссылка на сообщение
  • 0

@ShHyp0k Также, только измените сам запрос с INSERT INTO на UPDATE. По такому типу: 

format(mysql_query_string, sizeof(mysql_query_string), "UPDATE `таблица` SET `поле_админки_в_БД` = %d WHERE `поле_ника_в_БД` = '%s'", lvl, pInfo[playerid][pName]); 

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST я чет туплю, но не получается

CMD:makeadmin(playerid, params[])
{
	if (pInfo[playerid][pAdmin] < 8)
		return SendClientMessage(playerid, 0xFFFF00FF, !"Команда доступна с 8 уровня администратора");
	extract params -> new id, lvl; else
		return SendClientMessage(playerid, 0xFFFF00FF, !"[!]{DEDEDE} Используйте: /makeadmin [playerid] [уровень]");
	if (!IsPlayerConnected(id))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Игрока нет в сети.");
	if (!(1 <= lvl <= 8))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Уровень должен быть не менее 1 и не более 8!");

	pInfo[id][pAdmin] = lvl;

	static const
		fmt_str[] = "Вы были назначены администратором %d уровня. Назначил: %s.",
		fmt_str_2[] = "Вы назначили игрока %s, администратором %d уровня.";
	static
		string[sizeof fmt_str + MAX_PLAYER_NAME + 2 - 2*2];

	format(string, sizeof string, fmt_str, lvl, pInfo[playerid][pName]);
	SendClientMessage(id, 0x9EC73DAA, string);
	format(string, sizeof string, fmt_str_2, pInfo[id][pName], lvl);
	SendClientMessage(playerid, 0x9EC73DAA, string);
	
	format(mysql_query_string, sizeof(mysql_query_string), "UPDATE "T_ADMIN" SET level = %d WHERE name = '%s'", lvl, pInfo[playerid][pName]);
	return 1;
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@ShHyp0k а где же тут также, как и в системе банов? Там было три строчки, а у вас всего одна. Запрос форматируется, но не отправляется. Необходимо добавить еще:

В 17.07.2019 в 21:05, ShHyp0k сказал:

mysql_tquery(dbHandle, mysql_query_string, "", "");

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST Добавил, запрос форматируется и в базу тоже попадает, но админку выдает мне, а не игроку, как исправить?

CMD:makeadmin(playerid, params[])
{
	if (pInfo[playerid][pAdmin] < 8)
		return SendClientMessage(playerid, 0xFFFF00FF, !"Команда доступна с 8 уровня администратора");
	extract params -> new id, lvl; else
		return SendClientMessage(playerid, 0xFFFF00FF, !"[!]{DEDEDE} Используйте: /makeadmin [playerid] [уровень]");
	if (!IsPlayerConnected(id))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Игрока нет в сети.");
	if (!(1 <= lvl <= 8))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Уровень должен быть не менее 1 и не более 8!");

	pInfo[id][pAdmin] = lvl;

	static const
		fmt_str[] = "Вы были назначены администратором %d уровня. Назначил: %s.",
		fmt_str_2[] = "Вы назначили игрока %s, администратором %d уровня.";
	static
		string[sizeof fmt_str + MAX_PLAYER_NAME + 2 - 2*2];

	format(string, sizeof string, fmt_str, lvl, pInfo[playerid][pName]);
	SendClientMessage(id, 0x9EC73DAA, string);
	format(string, sizeof string, fmt_str_2, pInfo[id][pName], lvl);
	SendClientMessage(playerid, 0x9EC73DAA, string);
	
	format(mysql_query_string, sizeof(mysql_query_string), "UPDATE "T_ADMIN" SET level = %d WHERE name = '%s'", lvl, pInfo[playerid][pName]);
	mysql_tquery(dbHandle, mysql_query_string, "", "");
	return 1;
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@ShHyp0k в форматировании запроса pInfo[playerid][pName] замените playerid на id

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST если меняю playerid на id, то пишет "...назначил администратором..." и ничего не происходит

Поделиться сообщением


Ссылка на сообщение
  • 0

@ShHyp0k киньте полный код, который у вас получился. 

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST 

CMD:makeadmin(playerid, params[])
{
	if (pInfo[playerid][pAdmin] < 8)
		return SendClientMessage(playerid, 0xFFFF00FF, !"Команда доступна с 8 уровня администратора");
	extract params -> new id, lvl; else
		return SendClientMessage(playerid, 0xFFFF00FF, !"[!]{DEDEDE} Используйте: /makeadmin [playerid] [уровень]");
	if (!IsPlayerConnected(id))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Игрока нет в сети.");
	if (!(1 <= lvl <= 8))
		return SendClientMessage(playerid, 0xFF6347FF, !"[X]{DEDEDE} Уровень должен быть не менее 1 и не более 8!");

	pInfo[id][pAdmin] = lvl;

	static const
		fmt_str[] = "Вы были назначены администратором %d уровня. Назначил: %s.",
		fmt_str_2[] = "Вы назначили игрока %s, администратором %d уровня.";
	static
		string[sizeof fmt_str + MAX_PLAYER_NAME + 2 - 2*2];

	format(string, sizeof string, fmt_str, lvl, pInfo[id][pName]);
	SendClientMessage(id, 0x9EC73DAA, string);
	format(string, sizeof string, fmt_str_2, pInfo[playerid][pName], lvl);
	SendClientMessage(playerid, 0x9EC73DAA, string);

	format(mysql_query_string, sizeof(mysql_query_string), "UPDATE "T_ADMIN" SET level = %d WHERE name = '%s'", lvl, pInfo[id][pName]);
	mysql_tquery(dbHandle, mysql_query_string, "", "");
	return 1;
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@ShHyp0k значение в базе данных обновляется? И есть ли вообще в базе данных с администраторами ник игрока, которому админка дается? 

Поделиться сообщением


Ссылка на сообщение
  • 0

@DEST Значение не меняется, ничего не выдается и в бд с администраторами нету ника игрока. Мне нужно сделать что бы ему выдавалась админка и прописывалась в базу.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Danya_Lucky
      От Danya_Lucky
      CMD:car(playerid, params[])
      {
          new fmt_text[2640], Cache: result, id;
          mysql_format(mysql, fmt_text, sizeof fmt_text, "SELECT * FROM ownable_cars WHERE owner_id='%d'", GetPlayerAccountID(playerid));
          result = mysql_query(mysql, fmt_text, true);
          new rows = cache_num_rows();
          if(!rows) return SendClientMessage(playerid, 0x999999FF, "У Вас нет личного транспорта");
          new model_id, region[10], car_number[10];
          format(fmt_text, sizeof fmt_text, "");
          for(new i = 0; i < rows; i ++)
          {
              id = cache_get_field_content_int(i, "id");
              model_id = cache_get_field_content_int(i, "model_id") - 400;
              cache_get_field_content(i, "number", car_number);
              cache_get_field_content(i, "region", region);
              STRING_GLOBAL[0] = EOS;
              format(STRING_GLOBAL, sizeof STRING_GLOBAL, "{FFFFFF}%d. %s {888888}[%s | %s]\n", i + 1, GetVehicleInfo(model_id, VI_NAME), car_number, region);
              strcat(fmt_text, STRING_GLOBAL);
              SetPlayerListitemValue(playerid, i, id);
          }
          Dialog(playerid, DIALOG_OWNABLE_CAR_LIST, DIALOG_STYLE_LIST,"{0099FF}Выберите транспорт",fmt_text,"Выбрать", "Закрыть");
          cache_delete(result);
          return 1;
      }
    • Danya_Lucky
      От Danya_Lucky
      Как сделать /gh на визуал ник?