• Пожалуйста, создайте название темы отражающее ее смысл
  • Для ускорения решения Вашего вопроса заполните обязательные поля и подробно опишите возникшую проблему

Помощь Работа с .ini файлом

D1m0n41k

Участник
Сообщения
486
Реакции
202
Баллы
43
Добрый день. Может найдется добрый человек, который подскажет как сделать что бы в ini файле можно было вписывать 2 значения в 2х разных кавычках?

Пример ini файла сейчас:
"money1"

А нужно что бы было вот так:
"money1" "1000"

И нужно что бы второе значение использовалось для выдачи денег.

Исходный код:
C++:
#include <amxmodx>
#include <reapi>

#if AMXX_VERSION_NUM < 183
#include <dhudmessage>
#endif

/* === Настройки === */
#define FILE    "addons/amxmodx/configs/promocodes.ini" //Путь к файлу
#define CMD        "Promo" //Команда для набора промокода
#define CODES    25 //Макс. количество промокодов
#define HUD_X    -1.0 //Горизонтальное положение ДХУДА
#define HUD_Y    0.2 //Вертикальное положение ДХУДА

new g_szCode[CODES][256];
new bool:g_bActivated[CODES] = false;

public plugin_init() {
    register_clcmd(CMD, "ClCmd_Promocode");
}

public plugin_cfg() {

    new iFile = fopen(FILE, "rt");
    new szLine[1024], iCodeCounter = 0;
    while(!feof(iFile)) {

        fgets(iFile, szLine, charsmax(szLine));

        if((szLine[0] == '"') && (szLine[1] != '"') && (iCodeCounter <= CODES)) parse(szLine, g_szCode[iCodeCounter], 255);
        iCodeCounter++;
    }
    fclose(iFile);
}

public ClCmd_Promocode(iPlayer) {

    new szCode[256];

    read_args(szCode, charsmax(szCode));
    remove_quotes(szCode);
    trim(szCode);

    for(new iCode = 0; iCode < CODES; iCode++) {

        if(equal(szCode, g_szCode[iCode])) {

            if(g_bActivated[iCode]) {
                func_showMessage(iPlayer, 2);
                return PLUGIN_HANDLED;
            }

            g_bActivated[iCode] = true;

            write_file(FILE, "", iCode);

            func_givePrize(iPlayer, iCode);
            func_showMessage(iPlayer, 1);

            return PLUGIN_HANDLED;
        }
    }
    func_showMessage(iPlayer, 0);
    return PLUGIN_HANDLED;
}

public func_givePrize(iPlayer, iCode) {
    //Тут выдаем свои призы
    //Номер case означает ваш промокод в списке по порядку
    //Сколько вы указали призов в CODES, столько и будет кейсов, будьте внимательны
    //Отсчет начинается с нуля!
    switch(iCode) {
        case 0: { rg_add_account(iPlayer, ТУТ ВТОРОЙ АРГУМЕНТ ИЗ INI ФАЙЛА, AS_ADD, true); }
    }
    client_print_color(iPlayer, 0, "!^3[^4Промо-коды^3]^1 Получите ваш приз^4!");
}

public func_showMessage(iPlayer, iGive) {
    switch(iGive) {
        case 0: {
            set_dhudmessage(255, 0, 0, HUD_X, HUD_Y);
            show_dhudmessage(iPlayer, "Несуществующий промокод");
        }
        case 1: {
            set_dhudmessage(0, 255, 0, HUD_X, HUD_Y);
            show_dhudmessage(iPlayer, "Верный промокод");
        }
        case 2: {
            set_dhudmessage(255, 255, 0, HUD_X, HUD_Y);
            show_dhudmessage(iPlayer, "Промокод уже активирован");
        }
    }
}

За ранее большое спасибо ????
 
Делаете массив трехмерным
C++:
new g_szCode[CODES][256];

Второй уровень делаете на 2 ячейки для key и value
Парсите
C++:
parse(szLine, g_szCode[iCodeCounter][key], 255, g_szCode[iCodeCounter][value], 255)

C++:
case 0: { rg_add_account(iPlayer, g_szCode[iCode][value], AS_ADD, true); }
 
zhorzh78, сделал так:
C++:
enum CODES2 {
    key, value
};
new g_szCode[CODES][CODES2][256];

C++:
parse(szLine, g_szCode[iCodeCounter][key], 255, g_szCode[iCodeCounter][value], 255);

C++:
case 0: { rg_add_account(iPlayer, g_szCode[iCode][value], AS_ADD, true); }

Выдает на вот этой строке:
C++:
case 0: { rg_add_account(iPlayer, g_szCode[iCode][value], AS_ADD, true); }

Ошибку:
error 035: argument type mismatch (argument 2)

Вроде все верно сделал...
 
zhorzh78, вот же ж! Так и знал что дело во мне! Спасибо большое! :D
 
D1m0n41k, Сделайте другим способом, чтобы сразу было числом
C++:
enum CODES2 {
    key[256], value
};
new g_szCode[CODES][CODES2];

и используйте уже число
C++:
g_szCode[iCode][value]

Но, тогда value не сможет содержать строку)
 
V1adJkee, ну так ведь флаги это строка.
И выходит раз не сможет содержать строку, то и флаги вписать нельзя будет. Как я понимаю
 
Назад
Сверху