Вопросы

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

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

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

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

      Loaded log file: "server_log.txt".
      ----------
      SA-MP Dedicated Server
      ----------------------
      v0.3e, (C)2005-2012 SA-MP Team
      [02:24:42] 
      [02:24:42] Server Plugins
      [02:24:42] --------------
      [02:24:42]  Loading plugin: crashdetect.so
      [02:24:42]   CrashDetect plugin 4.19
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: sscanf.so
      [02:24:42] 
      [02:24:42]  ===============================
      [02:24:42]       sscanf plugin loaded.     
      [02:24:42]          Version:  2.8.3        
      [02:24:42]   (c) 2018 Alex "Y_Less" Cole  
      [02:24:42]  ===============================
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: streamer.so
      [02:24:42] 
      *** Streamer Plugin v2.9.4 by Incognito loaded ***
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: mysql_static.so
      [02:24:42]  >> plugin.mysql: R39-6 successfully loaded.
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: pawncmd.so
      [02:24:42] Pawn.CMD plugin v3.2.0 by urShadow has been loaded
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: mapandreas.so
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: YSF.so
      [02:24:42] This version of YSF doesn't support SA-MP 0.3z
      [02:24:42] Update to 0.3.7! http://sa-mp.com/download.php
      [02:24:42] Error: Unknown Linux server version (0x08076FC0)
      [02:24:42] Error: Big part of YSF will be unusable for you
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: CLA.so
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: pawnbots.so
      [02:24:42] Pawn.Bots plugin v0.2.1 by urShadow loaded
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: LauncherAddon.so
      [02:24:42] 
      [02:24:42]  ========[ LauncherAddon 1.3 ]========
      [02:24:42]    
      [02:24:42]    Версия сервера: Unknown
      [02:24:42]    Операционная система: Linux
      [02:24:42]    
      [02:24:42]    (c) - legendabrn -
      [02:24:42]    crack by vk.com/legendabrn
      [02:24:42]    
      [02:24:42]    Проверка активации...
      [02:24:42]    Проверка активации успешно пройдена
      [02:24:42]  ===============================
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: pawnraknet.so
      [02:24:42] [Pawn.RakNet] plugin v1.6.0 loading...
      [02:24:42] [Pawn.RakNet] 
          | Pawn.RakNet 1.6.0 | 2016 - 2023
          |--------------------------------
          | Author and maintainer: katursis

          | Compiled: Feb 12 2023 at 19:35:06
          |--------------------------------------------------------------
          | Repository: https://github.com/katursis/Pawn.RakNet
          |--------------------------------------------------------------
          | Wiki: https://github.com/katursis/Pawn.RakNet/wiki
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: FCNPC.so
      [02:24:42] 
      [02:24:42] -------------------------------------------------
      [02:24:42]      FCNPC - Fully Controllable NPC v2.0.9
      [02:24:42]             GNU/Linux SA-MP Unknown
      [02:24:42]            Apr 17 2024 at 09:11:36
      [02:24:42] 
      [02:24:42]   Author:       OrMisicL (2013 - 2015)
      [02:24:42]   Continued by: ziggi    (2016 - present)
      [02:24:42] 
      [02:24:42]   See full credits in the README.md file
      [02:24:42] -------------------------------------------------
      [02:24:42] 
      [02:24:42] Loading...
      [02:24:42] 
      [02:24:42] -------------------------------------------------
      [02:24:42]    ColAndreasv1.4.0
      [02:24:42] 
      [02:24:42]    Created By:
      [02:24:42]      [uL]Chris42O
      [02:24:42]      [uL]Slice
      [02:24:42]      [uL]Pottus
      [02:24:42] -------------------------------------------------
      [02:24:42] 
      [02:24:42] Loading...
      [02:24:42] ColAndreas v1.4.0 Loaded.
      [02:24:42]   Loaded.
      [02:24:42]  Loading plugin: md5.so
      [02:24:42]   MD5 v1.2 by BJIADOKC loaded
      [02:24:42]   Loaded.
      [02:24:42]  Loaded 13 plugins.
      [02:24:42] 
      [02:24:42] Filterscripts
      [02:24:42] ---------------
      [02:24:42]   Loading filterscript 'hgsystem.amx'...
      [02:24:42] [Launcher Addon]: Warning - В загружаемом AMX не подключен инклуд LauncherAddon.inc
      other.amx
      other.pwn
      hgsystem.amx