Вопросы

Новичок

Доброго времени суток уважаемые форумчане !
Хочу попросить помощь у вас, у меня проблемы с сохранением лидерки в базу данных, код:
 

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(1591800.04902506.079115.8725269.5358);
    ApplyActorAnimation(actor1, "PED""ROADROSS_FEMALE"4.111100);
    Create3DTextLabel("{FFFFFF}Нажмите {ffff00}L.ALT{FFFFFF} чтобы начать взаимодействие", COLOR_GREEN, 1800.04902506.079115.872510.001);
    //======================[ Пикапы ]==================================
    magazvhod1 = CreatePickup(1318232074.3257,1838.3256,12.5391, -1);
    magazvihod1 = CreatePickup(131823, -25.5779,-184.9357,1003.5469, -1);

    SetTimer("SecondUpdate"1000true);
    SetTimer("MinuteUpdate"60000true);

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

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


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

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

Ответы на этот вопрос пока отсутствуют

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

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

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

    • От OPCODERSSSS
      Прописал уже все инклуды,он мне все равно вот эту дрянь ну емае
       
       
      other.amx
      other.pwn
      hgsystem.amx