Вопросы

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(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 пользователей онлайн

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

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

    • Дебилойд
      От Дебилойд
      Здравствуйте!
      Мы ищем талантливого 3D-моделлера в команду нашего CRMP-проекта!
      Что нужно будет делать:
      Моделировать и адаптировать автомобили.
      Создавать и настраивать скины (модели персонажей).
      Большим плюсом будет:
      Умение создавать качественные и оптимизированные интерьеры.
      Если вы хотите стать частью нашей команды и развивать проект вместе с нами, пишите в ЛС. Ждем ваши портфолио!
    • LORDIKUS
      От LORDIKUS
      Уважаемые участники форума - всех приветствую, кто перешел в беседу моей темы обсуждения. В настоящее время у меня зарождается огромное желание и мысль создать собственный CR:MP проект, но столкнулся с единственной проблемой - с отсутствием команды людей, у которых будет искреннее желание ежедневно вкладывать свой труд на разработку проекта. Особого опыта в скриптинге, маппинге, дизайне или в моделировании у меня не имеется, поэтому такой критерий как опыт в определенной сфере для желающих вступить в команду я не рассматриваю. Так как проект не открыт и находится на начальной стадии создания, мое сотрудничество выстраивается на некоммерческой основе (без выплаты за проделанную работу и труд), однако я не собираюсь отрицать высокую ценность вложенного командой труд — труд, особенно на первой стадии разработки я рассматриваю превыше всего. После открытия проекта в зависимости от коммерции и чистой прибыли каждый участник будет получать настоящую выплату, однако это также может убить еще значительное время. Мне нужна команда, которая проявит искренний интерес в создании общего между командой CR:MP проекта, пожертвует свое время, а также вложит собственный труд благодаря заработанным навыкам. Если вас заинтересовала данная тема обсуждения, пожалуйста, свяжитесь со мной по любым возможным и удобным для вас контактам связи ниже. Спасибо всем, кто зашел в мою беседу!

      🔗 Спец. Связь:
      — DISCORD: https://discord.com/users/1452715348196589691 (перейти по ссылке и добавить в друзья) ИЛИ _shin833_ (ввести никнейм и отправить запрос дружбы)
      — VK: https://vk.com/shin833
      — TG: https://t.me/s_hin833
    • Korochansky
      От Korochansky
      Настало время объявить о скором выпуске первого релиза среды разработки под названием Spawn.

      В настоящее время программа находится на заключительных этапах доработки кода и локализации интерфейса.
      Таким образом, в течение следующей недели будет выпущена быстрая и современная среда разработки, обладающая следующими возможностями (о которых я расскажу сейчас, а о других — позже):
       
      Полнофункциональный локальный Git: 
      Индексирование, фиксации, индикаторы состояния и мягкий/жесткий сброс до любой точки сохранения одним щелчком мыши. Разрабатывайте свой игровой сервер, не боясь его сломать.
      Новички могут рассматривать это как историю кодовой базы вашего сервера (что и есть на самом деле).
       
      Чистый UTF-8 (без BOM): 
      Полный отказ от устаревшей кодировки Windows-1251 (CP1251) для абсолютной стабильности и идеальной совместимости с Git.
      Реализация поддержки CP1251 привела бы к нестабильному поведению программы и ухудшила бы пользовательский опыт.
       
      История изменений строк: Редактор выделяет измененные строки в реальном времени в полях рядом с номерами строк. Это позволяет мгновенно видеть границы изменений, внесенных с момента открытия файла.
       
      Сопоставление и выделение фигурных скобок: мгновенное выделение открывающих и закрывающих фигурных скобок для быстрой навигации по структуре кода и защиты от ошибок компиляции.
       
      Интеграция с SAMPCTL: готовая к использованию автоматизация процессов. Сборка, запуск сервера и менеджер зависимостей (управление библиотеками и плагинами) работают напрямую из интерфейса редактора.
       
      И многое другое...
       
      И самое главное: проект будет с открытым исходным кодом под лицензией GPLv3!
      Следите за новостями о выпуске в репозитории: https://github.com/daniilkorochansky/spawn
    • KodBi
      От KodBi
      шапка
      по одиночке работают
      нужны оба