Настроики через ini фаил.

Сообщения
38
Реакции
-1
Помог
1 раз(а)
Я хочу сделать настроики через ini фаил для одного плагина.
Так вот я вам скинул пример, можно ли как то улучшить код ? и рабочии ли набросок кода ?
Или сделать проще? Я тип могу через public plugin_cfg все сделать, но он работает лишь при перезапуске или старте сервера. ( Это как раз мне не подходит. )


Код:
/*
    Пример использования ini фаила.
*/


#include <amxmodx>
#include <amxmisc>
#include <fun>

#define PLUGIN "Plugin"
#define VERSION "1.0"
#define AUTHOR "DEVCS"

new const FILE_INI[] = "file.ini"

new gszMaxHealth;

enum
{
    SECTION_NONE = 0,
    SECTION_MAIN
}

public plugin_precache(){
   
    LoadFile();  
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("give_hp", "give_health")
}

public give_health(id)
{
    set_user_health(id, get_user_health(id) + gszMaxHealth)
}

LoadFile()
{
    new path[64]
    get_configsdir(path, charsmax(path))
    format(path, charsmax(path), "%s/%s", path, FILE_INI)
   
    if (!file_exists(path))
    {
        new error[100]
        formatex(error, charsmax(error), "Не удается загрузить файл настройки %s!", path)
        set_fail_state(error)
        return;
    }
   
    new linedata[1024], key[64], value[960], section
   
    new file = fopen(path, "rt")
   
    while (file && !feof(file))
    {
        fgets(file, linedata, charsmax(linedata))
       
        replace(linedata, charsmax(linedata), "^n", "")
       
        if (!linedata[0] || linedata[0] == ';') continue;
       
        if (linedata[0] == '[')
        {
            section++
            continue;
        }
       
        strtok(linedata, key, charsmax(key), value, charsmax(value), '=')
       
        trim(key)
        trim(value)
       
        switch (section)
        {
            case SECTION_MAIN:
            {
                if(equal(key, "HEALTH"))
                    gszMaxHealth = str_to_num(value)
            }          
        }
    }
    if (file) fclose(file)
}
 

Вложения

  • 1.5 KB Просмотры: 3
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
DEVCS,
но он работает лишь при перезапуске или старте сервера.
при смене карты тоже должно отрабатывать. И метод парсинга здесь для указанной задачи экспенсивный. Откуда ты выдрал его? Я тут сейчас с плагином мин ковыряюсь, там парсинг один в один, но задача куда шире :)
 
Сообщения
38
Реакции
-1
Помог
1 раз(а)
BlackSignature, как раз из мин и взял) Просто думаю будет ли работать, ранее создавал магазин оружия кастомныи, и хотел вывести <скидку, цены, и флаг випа в ini фаил>, так у меня почему то флаг не читался, и цены.

На счет plugin_cfg знаю что при смене карты, но я вот себе поставил цель вывести через ini фаил, может где то есть статьи про это)
 
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
DEVCS, а зачем этот изврат? Куда проще всё сделать через квары. В минах необходимость парсинга конфига обусловлена возможностью расширения - юзер может сам добавить уровни для мин. Ну, по крайней мере в той версии, что у меня сейчас на руках.
 
Сообщения
38
Реакции
-1
Помог
1 раз(а)
BlackSignature, хорошо спасибо) Просто я могу все по идее в массивы сделать и как по мне это будет удобнее)
Меня просто попросил человек сделать для него это, чтобы не копаться в исходнике и не нарушить работу плагина.
Буду придерживаться plugin_cfg)

Да лазерные мины от serfreeman1337, с прокачкои до 3 LVL, и с tripmine.ini )
 
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
DEVCS, так задача какая? определить, сколько хп выдаёт консольная команда? в таком случае вариант из мин хоть и подходит, но является избыточным. Раскури любой плагин где есть квары. Регаешь квар в плагине, затем вызываешь конфиг, где этот квар прописан с установленным ему значением, через server_cmd(). Для amxx 183+ вообще проще, там есть AutoExecConfig() который сам и создаст конфиг, и будет его вызывать.
 
Сообщения
38
Реакции
-1
Помог
1 раз(а)
BlackSignature, Да это набросок кода, которыи я хотел в дальнеишем использовать.

Ну у меня 1.9.0
Ну я посмотрю: AutoExecConfig()
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу