От
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, помогите пожалуйста сохранение лидерки и заместителя сделать