Вопросы

ShHyp0k
Освоившийся

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

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


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

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

  • 0
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;
}

 

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


Ссылка на сообщение
  • 0
Андрей Лазарев
Активный
  В 7/17/2019 в 13:21, 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
ShHyp0k
Освоившийся

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

 

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


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

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

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


Ссылка на сообщение
  • 0
ShHyp0k
Освоившийся

@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
ShHyp0k
Освоившийся

@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 а где же тут также, как и в системе банов? Там было три строчки, а у вас всего одна. Запрос форматируется, но не отправляется. Необходимо добавить еще:

  В 7/17/2019 в 18:05, ShHyp0k сказал:

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

Читать далее...  

 

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


Ссылка на сообщение
  • 0
ShHyp0k
Освоившийся

@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
Освоившийся

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

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


Ссылка на сообщение
  • 0
ShHyp0k
Освоившийся

@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
ShHyp0k
Освоившийся

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

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


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

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

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

    • Senwik
      От Senwik
      Здравствуйте,где можно скачать КРМП 0.3.7 не бета тест?
    • breznov
      От breznov
      Доброго времени суток уважаемые форумчане !
      Хочу попросить помощь у вас, у меня проблемы с сохранением лидерки в базу данных, код:
       
      new FactionName[32] = "Скинхеды"; new Float:FactionHQX = 123.45, Float:FactionHQY = 678.90, Float:FactionHQZ = 10.11; new FactionMembers[MAX_PLAYERS]; new FactionRank[MAX_PLAYERS]; new FactionLeader = -1; // ID лидера (-1 означает, что лидера нет) new FactionDeputy = -1; // ID заместителя (-1 означает, что заместителя нет)

       
      #define FACTION_SKINHEDS 1 #define LEADER_INFO_DIALOG 1


       
      new const FactionRankNames[][] = {     "Новичок",     "Боец",     "Стрелок",     "Головорез",     "Бригадир",     "Доверенное лицо",     "Советник",     "Заместитель",     "Консильери",     "Дон" };  
      public OnGameModeInit():

       
      public OnGameModeInit() {     ConnectMySQL();     DisableInteriorEnterExits();     EnableStuntBonusForAll(0);     SetGameModeText("Armade RP v2.0");     SendRconCommand("hostname "SERVER_NAME" by Didenko");     LoadMapping();     Iter_Clear(Admins_ITER);     Iter_Clear(Question_ITER);     actor1 = CreateActor(159, 1800.0490, 2506.0791, 15.8725, 269.5358);     ApplyActorAnimation(actor1, "PED", "ROADROSS_FEMALE", 4.1, 1, 1, 1, 0, 0);     Create3DTextLabel("{FFFFFF}Нажмите {ffff00}L.ALT{FFFFFF} чтобы начать взаимодействие", COLOR_GREEN, 1800.0490, 2506.0791, 15.8725, 10.0, 0, 1);     //======================[ Пикапы ]==================================     magazvhod1 = CreatePickup(1318, 23, 2074.3257,1838.3256,12.5391, -1);     magazvihod1 = CreatePickup(1318, 23, -25.5779,-184.9357,1003.5469, -1);     SetTimer("SecondUpdate", 1000, true);     SetTimer("MinuteUpdate", 60000, true);     LoadFactionsData(); // Загружаем данные о фракциях и лидерах     return 1; }
       
      Стоки:

       
      stock LoadFactionsData() {     print("LoadFactionsData: Starting to load factions data...");     new query[64];     format(query, sizeof(query), "SELECT id, FactionLeader FROM factions");     mysql_tquery(dbHandle, query, "LoadFactionsData_Callback");     print("LoadFactionsData: Query sent.");     return 1; } forward LoadFactionsData_Callback(MySQL:handle, Cache:result); public LoadFactionsData_Callback(MySQL:handle, Cache:result) {     new rows = cache_num_rows();     printf("LoadFactionsData_Callback: Number of rows loaded: %d", rows);     if(rows > 0)     {         for(new i = 0; i < rows; i++)         {             cache_set_result(0);             new factionID, factionLeaderID;             if (!cache_get_value_name_int(i, "id", factionID)) {                 printf("[ERROR] LoadFactionsData_Callback: Failed to get 'id' for row %d", i);                 continue; // Переходим к следующей итерации, если не удалось получить ID             }             if (!cache_get_value_name_int(i, "FactionLeader", factionLeaderID)) {                 printf("[ERROR] LoadFactionsData_Callback: Failed to get 'FactionLeader' for row %d", i);                 continue; // Переходим к следующей итерации, если не удалось получить FactionLeader             }             printf("LoadFactionsData_Callback: Row %d: factionID = %d, factionLeaderID = %d", i, factionID, factionLeaderID);             if(factionLeaderID != 0)             {                 FactionLeader = factionLeaderID;                 FactionRank[factionLeaderID] = 10;                 printf("LoadFactionsData_Callback: Setting FactionLeader to %d and rank to 10.", factionLeaderID);                 // Не вызываем здесь SetPlayerSkin, пока не подключится игрок                 //if(IsPlayerConnected(factionLeaderID))                 //{                 //    SetPlayerSkin(factionLeaderID, 115);                 //    PlayerSkin[factionLeaderID] = 115;                 //}             }         }     }     else {         print("LoadFactionsData_Callback: No factions data found in the database.");     }     return 1; } stock SetFactionLeader(playerid, targetid) {     if(player_info[playerid][ADMIN] < 5)     {         SendClientMessage(playerid, CG, "Вы не являетесь администратором!");         return 1;     }     // Убираем старого лидера     if(FactionLeader != -1)     {         FactionRank[FactionLeader] = 1; // Понижаем ранг старого лидера     }     // Назначаем нового лидера     FactionLeader = targetid;     FactionRank[targetid] = 10;     // Сохраняем ID лидера в базу данных     new query[128];     format(query, sizeof(query), "UPDATE factions SET FactionLeader = '%d' WHERE id = '1'", targetid); // Замените '1' на ID вашей фракции, если у вас их несколько     mysql_tquery(dbHandle, query);     new szString[128];     format(szString, sizeof(szString), "Игрок %s назначен лидером фракции!", targetid);     SendClientMessage(playerid, 0x00FF00AA, szString);     SendClientMessage(targetid, 0x00FF00AA, "Вы назначены лидером фракции!");     // Выдаем скин 115     SetPlayerSkin(targetid, 115);     PlayerSkin[targetid] = 115; // Обновляем массив PlayerSkin     SPD(playerid, DLG_LEADERINFO1, DIALOG_STYLE_LIST, "Информация необходимая к прочтению", "{FF0000}!!!ПРОЧИТАТЬ!!!\n{0089ff}[1]{ffffff} Команды лидера", "Выбрать", "Закрыть");     return 1; } stock SetFactionDeputy(playerid, targetid) {     // Проверка на то, является ли игрок админом     if(player_info[playerid][ADMIN] > 5)     {         SendClientMessage(playerid, CG, "Вы не являетесь администратором!");         return 1;     }     // Убираем старого заместителя     if(FactionDeputy != -1) FactionRank[FactionDeputy] = 1; // Понижаем ранг старого заместителя     // Назначаем нового заместителя     FactionDeputy = targetid;     FactionRank[targetid] = 9; // Устанавливаем ранг 9 (Консильери)     new szString[128];     format(szString, sizeof(szString), "Игрок %d назначен заместителем фракции!", targetid);     SendClientMessage(playerid, 0x00FF00AA, szString);     SendClientMessage(targetid, 0x00FF00AA, "Вы назначены заместителем фракции!");     return 1; } // Функция проверки, является ли игрок лидером stock IsPlayerLeader(playerid) {     if(playerid == FactionLeader)     {         return 1;     }     return 0; } // Функция проверки, является ли игрок заместителем stock IsPlayerDeputy(playerid) {     if(playerid == FactionDeputy)     {         return 1;     }     return 0; } // Функция вступления во фракцию stock JoinFaction(playerid, inviterid) {     // Проверяем, состоит ли игрок уже в какой-либо фракции     for(new i = 0; i < MAX_PLAYERS; i++)     {         if(FactionMembers[playerid] != 0)         {             SendClientMessage(playerid, 0xFF0000AA, "Вы уже состоите в другой фракции!");             return 1;         }     }     // Добавляем игрока во фракцию     FactionMembers[playerid] = FACTION_SKINHEDS;     FactionRank[playerid] = 1; // Рядовой (Новичок) - Устанавливаем ранг     new szString[128];     format(szString, sizeof(szString), "Вы вступили в '%s' по приглашению игрока %d!", FactionName, inviterid);     SendClientMessage(playerid, 0x00FF00AA, szString);     format(szString, sizeof(szString), "Игрок %d вступил в '%s' по вашему приглашению!", playerid, FactionName);     SendClientMessage(inviterid, 0x00FF00AA, szString);     return 1; } stock LeaveFaction(playerid) {     if(!IsPlayerInFaction(playerid, FACTION_SKINHEDS))     {         SendClientMessage(playerid, 0xFF0000AA, "Вы не состоите в этой фракции!");         return 1;     }     FactionMembers[playerid] = 0; // Обнуляем ID фракции (0 - значит, не состоит)     FactionRank[playerid] = 0;     SendClientMessage(playerid, 0x00FF00AA, "Вы покинули Семью Рейес!");     return 1; } stock GetFactionRank(playerid) {     return FactionRank[playerid]; } stock SetFactionRank(playerid, targetid, rank) {     // Проверка на то, является ли игрок лидером или заместителем     if(!IsPlayerLeader(playerid) && !IsPlayerDeputy(playerid))     {         SendClientMessage(playerid, 0xFF0000AA, "Вы не имеете права устанавливать ранги!");         return 1;     }     // Проверка на то, чтобы ранг не был слишком высоким     if(rank > 10 || rank < 1)     {         SendClientMessage(playerid, 0xFF0000AA, "Неверный ранг!");         return 1;     }     FactionRank[targetid] = rank;     new szString[128];     format(szString, sizeof(szString), "Вы установили ранг '%s' для игрока %d", FactionRankNames[rank - 1], targetid); // Получаем название из массива     SendClientMessage(playerid, 0x00FF00AA, szString);     format(szString, sizeof(szString), "Вам установлен ранг '%s' игроком %d", FactionRankNames[rank - 1], playerid); // Получаем название из массива     SendClientMessage(targetid, 0x00FF00AA, szString);     return 1; } // Функция проверки, состоит ли игрок во фракции stock IsPlayerInFaction(playerid, factionid) {     if(FactionMembers[playerid] == factionid)     {         return 1;     }     return 0; }
      Ну и команды естественно:

       
      // Команда для установки ранга (пример, только для лидеров) CMD:setrank(playerid, cmdtext[]) {     new targetid, rank;     if(sscanf(cmdtext, "dd", targetid, rank))     {         SendClientMessage(playerid, 0xFF0000AA, "Используйте: /setrank [ID игрока] [Ранг]");         return 1;     }     SetFactionRank(playerid, targetid, rank);     return 1; } // Команда информации о фракции CMD:factioninfo(playerid, cmdtext[]) {     new szString[256];     format(szString, sizeof(szString), "Название: %s, Штаб-квартира: %.2f %.2f %.2f", FactionName, FactionHQX, FactionHQY, FactionHQZ);     SendClientMessage(playerid, 0x00FF00AA, szString);     return 1; } CMD:setleader(playerid, cmdtext[]) {     new targetid;     if(sscanf(cmdtext, "d", targetid))     {         SendClientMessage(playerid, 0xFF0000AA, "Используйте: /setleader [ID игрока]");         return 1;     }     SetFactionLeader(playerid, targetid);     return 1; } CMD:setdeputy(playerid, cmdtext[]) {     new targetid;     if(sscanf(cmdtext, "d", targetid))     {         SendClientMessage(playerid, 0xFF0000AA, "Используйте: /setdeputy [ID игрока]");         return 1;     }     SetFactionDeputy(playerid, targetid);     return 1; } // -------------------------------------------------------------------------- // Команда для приглашения игрока во фракцию (только для лидеров и заместителей) // -------------------------------------------------------------------------- CMD:invite(playerid, cmdtext[]) {     new targetid;     if(!IsPlayerLeader(playerid) && !IsPlayerDeputy(playerid))     {         SendClientMessage(playerid, 0xFF0000AA, "Вы не имеете права приглашать игроков!");         return 1;     }     if(sscanf(cmdtext, "d", targetid))     {         SendClientMessage(playerid, 0xFF0000AA, "Используйте: /invite [ID игрока]");         return 1;     }     // Добавим проверку на приглашение самого себя     if(playerid == targetid)     {         SendClientMessage(playerid, 0xFF0000AA, "Вы не можете пригласить самого себя!");         return 1;     }     JoinFaction(targetid, playerid);     return 1; } // -------------------------------------------------------------------------- // Команда для исключения игрока из фракции (только для лидеров и заместителей) // -------------------------------------------------------------------------- CMD:uninvite(playerid, cmdtext[]) {     new targetid;     if(!IsPlayerLeader(playerid) && !IsPlayerDeputy(playerid))     {         SendClientMessage(playerid, 0xFF0000AA, "Вы не имеете права исключать игроков!");         return 1;     }     if(sscanf(cmdtext, "d", targetid))     {         SendClientMessage(playerid, 0xFF0000AA, "Используйте: /uninvite [ID игрока]");         return 1;     }     // Добавим проверку на исключение самого себя     if(playerid == targetid)     {         SendClientMessage(playerid, 0xFF0000AA, "Вы не можете увольнять самого себя!");         return 1;     }     if(!IsPlayerInFaction(targetid, FACTION_SKINHEDS))     {         SendClientMessage(playerid, 0xFF0000AA, "Этот игрок не состоит в вашей фракции!");         return 1;     }     LeaveFaction(targetid);     return 1; }

      Ребят, не судите строго пожалуйста, делал с помощью ChatGPT, помогите пожалуйста сохранение лидерки и заместителя сделать