Добро пожаловать на форум, Гость, это ваша панель
  • Страница 1 из 1
  • 1
Как добавить отдельный файл для настроек мода?
KinD
Дата: Суббота, 24.05.2014, 11:40 | Сообщение # 1
офлайн

  • Сообщения: 1148
  • Награды: 22
  • Замечания:
 
#ВНИМАНИЕ!В статье показан ТОЛЬКО способ получения значений,как вы их будите использовать вам решать.

1)Заходим в sma и добавляем

Код
#include "war3ft/war3ft_option.h"
#include "war3ft/war3ft_option.inl"


2)Создаем в папке war3ft файлы

Код
war3ft_option.h
war3ft_option.inl


3)Открываем war3ft_option.h и добавляем туда

Код
#define WAR3FT_OPTION_FILE "/addons/amxmodx/configs/war3ft/war3ft_option.ini"
#define SECTION_BASE_OPTION 1
#define SECTION_RACE_UNDEAD 2
//Max
#define MAX_OPTION_RACE 3
#define MAX_OPTION_BASE 3
//Race:Undead
#define OPTION_EXPLOSION_MAX_DAMAGE 0
#define OPTION_EXPLOSION_RANGE 1
#define OPTION_EXPLOSION_BLAST_RADIUS 2
new g_iOption_Race[MAX_OPTION_RACE][MAX_RACES]
new g_iOption_Base[MAX_OPTION_BASE]


4)Открываем war3ft_option.inl и добавляем туда

Код
public Get_War3ft_Option()
{
         new path[64]
         format(path, charsmax(path), "%s",WAR3FT_OPTION_FILE)
               
         if (!file_exists(path))
         {
            new error[100]
            formatex(error, charsmax(error), "Cannot load options file %s!", path)
            set_fail_state(error)
            return;
         }
         new linedata[1024], key[64], value[600], section
               
         new file = fopen(path, "rt")
               
         while (file && !feof(file))
         {
            fgets(file, linedata, 1023)
            replace(linedata, 1023, "^n", "")
            if (!linedata[0] || linedata[0] == ';') continue;
            if (linedata[0] == '[')
            {
               section++
               continue;
            }
                  
            strtok(linedata, key, charsmax(key), value, 599, '=')
                  
            trim(key)
            trim(value)
                  
            switch (section)
            {
               case SECTION_BASE_OPTION:
               {
                  if (equal(key, "TEST VALUE"))
                     g_iOption_Base[0] = str_to_num(value)
                  else if (equal(key, "TEST VALUE2"))
                     g_iOption_Base[1] = str_to_num(value)
                        
               }
               case SECTION_RACE_UNDEAD:
               {
                  if (equal(key, "EXPLOSION_MAX_DAMAGE"))
                     g_iOption_Race[OPTION_EXPLOSION_MAX_DAMAGE][RACE_UNDEAD] = str_to_num(value)
                  else if (equal(key, "EXPLOSION_RANGE"))
                     g_iOption_Race[OPTION_EXPLOSION_RANGE][RACE_UNDEAD] = str_to_num(value)
                  else if (equal(key, "EXPLOSION_BLAST_RADIUS"))
                     g_iOption_Race[OPTION_EXPLOSION_BLAST_RADIUS][RACE_UNDEAD] = str_to_num(value)         
                      
               }
            }
         }
         server_print("1.%d  2.%d",g_iOption_Base[0],g_iOption_Base[1])
         server_print("1.%d  2.%d  3.%d",g_iOption_Race[OPTION_EXPLOSION_MAX_DAMAGE][RACE_UNDEAD],g_iOption_Race[OPTION_EXPLOSION_RANGE][RACE_UNDEAD],g_iOption_Race[OPTION_EXPLOSION_BLAST_RADIUS][RACE_UNDEAD])
         if (file) fclose(file)         
}


5)Открываем .sma и добавляем в plugin_init или  plugin_precache

Код
Get_War3ft_Option()


6)Создаем файл war3ft_option.ini(в соотв. папке)

Код
[Base]TEST VALUE = 10
TEST VALUE2 = 15
[Race:Undead]
EXPLOSION_MAX_DAMAGE = 51
EXPLOSION_RANGE = 301
EXPLOSION_BLAST_RADIUS = 251


7)Дальше используем мозг и изменяем на свое усмотрение.
Прикрепления: war3ft_option.h (0.4 Kb) · war3ft_option.inl (1.6 Kb) · war3ft_option.ini (0.1 Kb)


Skype:daywerok

Сообщение отредактировал KinD - Суббота, 24.05.2014, 11:51
 
  • Страница 1 из 1
  • 1
Поиск: