Я хочу сделать настроики через ini фаил для одного плагина.
Так вот я вам скинул пример, можно ли как то улучшить код ? и рабочии ли набросок кода ?
Или сделать проще? Я тип могу через public plugin_cfg все сделать, но он работает лишь при перезапуске или старте сервера. ( Это как раз мне не подходит. )
Так вот я вам скинул пример, можно ли как то улучшить код ? и рабочии ли набросок кода ?
Или сделать проще? Я тип могу через 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