Рекомендованные сообщения



18 posts in this topic

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

@Андрей Лазарев Сорян, забыл 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;
}

 

Share this post


Link to post
Share on other sites
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;

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Edited by ShHyp0k
Причина: добавил команду

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

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

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

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Guest Zakharchik
      By Guest Zakharchik
      Здравствуйте купив Launcher Addon 1.3 ща 400р я использовал его в тестовом моде, но через день решил сменить его, на тестовом моде работало на данном моде не работает Supreme 1.9
    • skotal
    • Guest Дмитрий
      By Guest Дмитрий
      Здравствуйте! Скажите, пожайлуста, что мне делать у меня проблема с базой данных MySQL. То есть Denwer я скачал и в phpMyAdmin создал я базу данных. Потом мне с этой базой данных нужно, что-то делать, чтоб добавить её в Pawno и сервер заработал. Но основной базы данных сервера нет. Я обратился с этой проблемой в Интернет и мне сказали, что её нужно найти в папке Денвера в папке data. Захожу и её нету. То есть папка с базой данных, которую я создал есть, а самого файл с форматом SQL нет! Что делать? Помогите, пожайлуста!