12:34
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: Dima-kun, Alcoholik  
Стандартизация конфигурационных файлов
[ER]ChezДата: Воскресенье, 28.03.2010, 20:33 | Сообщение # 1
Уверенный в себе
Группа: Пользователи
Сообщений: 250
Награды: 5
Город: Крыжопль
Репутация: 104
Замечания: 100%
Статус:
Как думаю многие заметили каждый мод имеет свои файлы, свои папки и все со своими наборами переменных и значений.
У меня есть идея привести все моды к единому шаблону файлов, забудем про те моды и скрипты которые уже есть, но те которые будем разрабатывать привести к единому виду.

Спросите "зачем", поясняю: столкнулся тут с проблемой совмещения админки и самого мода, а конкретно системы использовали одинаковые файлы и не могли работать совместно.

На днях, точнее в прошлом месяце я написал систему позволяющая читать файл конфигурации так чтобы брать из него только необходимые строки, все остальное игнорируется, я готов поделиться этим кодом если народ согласиться все стандартизировать.

Поясняю что за система:
читается файл конфигурации сервера config.cfg и из него берутся только необходимые строки.
подробно:
сервер берет информацию только из строк предназначенных ему не обращая внимания на другие строки(количество строк не имеет значения)
содержимое конфига на примере строки:
[сщву]sv_logfile "1" /!вести логи[/сщву]
где:
sv_logfile - переменная котрую использует сервер
"1" - значение переменной
/!вести логи просто нечитаемые комменты в строке. Почему для коммента использованы символы /!? Да все просто, потому что в url адресах есть // и будет обрезание адреса crazy
Все переменные нужно привести к единому виду.

В чем преимущество такой системы: на одном сервере можно использовать несколько модов без размножения числа серверов. Пропадут такие ошибки как лишний пробел в строке конфига или в неправильном порядке строк в конфиге. Отпадет проблема разбираться за что какая переменная в конфиге отвечает.

Превосходство такой системы в её гибкости и практически полной независимости от пользователя, даже если он что-то не укажет или укажет неверно, значение будет выставлено по-умолчанию, а ему будет выдана ошибка или предупреждение.

Поэтому я считаю внедрение такой системы среди студий и опытных скриптеров поможет многим. К примеру имеем на сервере 8 [FS] это будет 9 файлов конфигурации, а при общей системе всего 1

Шаблон:
Внутринности кода:

Code

enum infocfg //думаю не нужно объяснять
{
  namevalue[32],
  value[128],
  bool:readvalue
};

//массив с самими параметрами
//имя переменной; её значение(тут же прописываются дефолтные); служебный флаг, ниже его опишу
new Config[22][infocfg] = {  
{"sv_servername","",false},//имя сервера (критический параметр, дефолта нет, если в кфг не указан сервер не запускается)
{"sv_mailadmin","",false},//почта админа для связи
{"sv_icqadmin","",false},//ася админа
{"sv_serverurl","",false},//адрес сайта севрера
{"sv_freezetime","3",false},
{"sv_logfile","1",false},
{"sv_logdetail","3",false},
{"sv_playerid","0",false},
{"sv_globalchat", "1",false},
{"sv_accounts","1",false},
{"sv_fraglimit","0",false},
{"sv_pinglimit","0",false},
{"sv_afktime","0",false},
{"sv_adminsyst em","1",false},
{"sv_restarttime","0",false},
{"sv_fragpoint","10",false},
{"sv_deathpoint","0",false},
{"ban_cheat","43200",false},
{" ban_flood","30",false},
{"file_logdirectory","logs/",false},
{"file_mapdirectory","maps/",false},
{"file_accountdirectory","accounts/",false}
};

public OnGameModeInit()
{
  if(!LoadConfig()) return SendRconCommand("exit");//помещаем в начало паблика!!!
  ...
  return 1;
}

//загрузка самого конфига
LoadConfig()
{
  if(!fexist("config.cfg")) return print("FATAL ERROR: File \"config.cfg\" not found!\n");
  new valtmp[256],tmp[64];
  new File: file = fopen("config.cfg", io_read);
  while(fread(file, valtmp))
  {
   format(valtmp,strlen(valtmp)-2,valtmp);
   for(new t; t < strlen(valtmp); t++)
   {
    if(valtmp[t] == 92) valtmp[t] = '/';
    if(valtmp[t] == '/' && valtmp[t+1] == '!') {strmid(valtmp, valtmp, 0, t, 256); break;}
   }
   format(valtmp,strlen(valtmp),NoDoubleSpace(valtmp));
   for(new t; t < strlen(valtmp); t++) if(valtmp[t] == ' ') {strmid(tmp, valtmp, 0, t, 64); break;}
   if(strlen(valtmp)) for(new j; j < sizeof(Config); j++)
   {
    if(strcmp(tmp,Config[j][namevalue],false) == 0)
    {
        new a = -1, b;
        for(new t; t < strlen(valtmp); t++)
     {
         if(valtmp[t] == '"' && a == -1) a = t+1;
         else if(valtmp[t] == '"' && a != -1){b = t; break;}
     }
     if(b-a > 0) strmid(Config[j][value], valtmp, a, b, 128);
     if(j == 0 && strlen(Config[j][value]) < 1) return print("FATAL ERROR: \"sv_servername\" empty value!\n");
     if(j == 4 && strval(Config[j][value]) < 0) return print("FATAL ERROR: \"sv_freezetime\" incorrect value!\n");
     if(j == 5 && !(0 <= strval(Config[j][value]) <= 1)) return print("FATAL ERROR: \"sv_logfile\" incorrect value!\n");
     if(j == 6 && !(1 <= strval(Config[j][value]) <= 3)) return print("FATAL ERROR: \"sv_logdetail\" incorrectvalue!\n");
     if(j == 7 && !(0 <= strval(Config[j][value]) <= 1)) return print("FATAL ERROR: \"sv_playerid\" incorrect value!\n");
     if(j == 8 && !(0 <= strval(Config[j][value]) <= 2)) return print("FATAL ERROR: \"sv_globalchat\" incorrect value!\n");
     if(j == 9 && !(0 <= strval(Config[j][value]) <= 2)) return print("FATAL ERROR: \"sv_accounts\" incorrect value!\n");
     if(j == 10 && strval(Config[j][value]) < 0) return print("FATAL ERROR: \"sv_fraglimit\" incorrect value!\n");
     if(j == 11 && strval(Config[j][value]) < 0) return print("FATAL ERROR: \"sv_pinglimit\" incorrect value!\n");
     if(j == 12 && strval(Config[j][value]) < 0) return print("FATAL ERROR: \"sv_afktime\" incorrect value!\n");
     if(j == 13 && !(0 <= strval(Config[j][value]) <= 1)) return print("FATAL ERROR: \"sv_adminsystem\" incorrect value!\n");
     if(j == 14 && strval(Config[j][value]) < 0) return print("FATAL ERROR: \"sv_restarttime\" incorrect value!\n");
     if(j == 15 && strval(Config[j][value]) < 10) return print("FATAL ERROR: \"sv_fragpoint\" incorrect value (min = 10)!\n");
     if(j == 16 && strval(Config[j][value]) < 0) return print("FATAL ERROR: \"sv_deathpoint\" incorrect value!\n");
     if(j == 17 && strval(Config[j][value]) < 0) return print("FATAL ERROR: \"ban_cheat\" incorrect value!\n");
     if(j == 18 && strval(Config[j][value]) < 0) return print("FATAL ERROR: \"ban_flood\" incorrect value!\n");
     Config[j][readvalue] = true;
     break;
    }
   }
  }
  fclose(file);
  for(new i;i < sizeof(Config);i++) if(Config[i][readvalue] == false) printf("ERROR: value \"%s\" not found in \"config.cfg\"!", Config[i][namevalue]);
  if(strlen(Config[0][value]) < 1) return print("FATAL ERROR: \"sv_servername\" empty value!\n");
  return 1;
}
//служебная переменная нужна при загрузке конфига, для определения тех переменных которые уже прочитаны и тех которые отсутствуют!

//удаление лишних пробелов и табов
NoDoubleSpace(string[])
{
  new newstring[512];
  start: new bool:yes = false;
  for(new i; i < strlen(string); i++)
  {
      if(string[i] == '    ') string[i] = ' ';
      if(string[i+1] == '    ') string[i+1] = ' ';
      if(yes)string[i] = string[i+1];
      else if(string[i] == ' ' && string[i+1] == ' ')yes = true;
  }
  if(yes)goto start;
  if(string[strlen(string)-2] != ' ' && string[strlen(string)-1] == ' ') strmid(newstring, string, 0, strlen(string)-1, 512);
  else strmid(newstring, string, 0, strlen(string), 512);
  return newstring;
}

замечу:
sv_ - серверные значения
ban_ - значения связанные с системой банов
file_ - значения связанные с файлами, в данном примере путь до места хранения логов, карт и аккаунтов. При желании здесь можно прописать и формат конечных файлов.
Важное замечание: переменные я на протяжение всего кода использую как строки, в необходимых местах я просто использую strval()

внутринности фала конфигурации:

Code
sv_servername "Mego DM"  /!название сервера
sv_mailadmin ""    /!почта админа
sv_icqadmin ""    /!icq админа
sv_serverurl ""    /!сайт сервера
sv_freezetime "3"   /!время заморозки
sv_logfile "1"    /!вести логи
sv_logdetail "3"   /!подробность логов 1...3
sv_playerid "1"    /!отображать ИД игроков в чате
sv_globalchat "1"   /!тип глобального чата: 0 - по умолчанию; 1 - глобальный чат только когда игрок в игре; 2 - глобальный чат только на карте
sv_accounts "1"    /!система аккаунтов: 0 - отключена; 1 - включена, регистрация не обязательна; 2 - включена, регистрация обязательна
sv_fraglimit "0"   /!лимит фрагов
sv_afktime "0"    /!автокикер за AFK (в минутах)
sv_adminsystem "1"   /!встроенная админка
sv_restarttime "0"   /!время авторестарта (в минутах)
sv_fragpoint "10"   /!очков за убийство
sv_deathpoint "0"   /!очков за смерть (вычитаеться)
sv_pinglimit "0"   /!ограничитель пинга
ban_cheat "43200"   /!время бана за читы (в минутах)
ban_flood "30"    /!время бана за флуд (в минутах)
file_logdirectory "logs/"   /!директория с логами
file_mapdirectory "maps/"   /!директория с картами
file_accountdirectory "accounts/"   /!директория с аккаунтами

час = 60 минут
день = 1440 минут
неделя = 10080 минут
месяц = 43200 минут

Порядок строк и их количество не имеет значение!

26.07.2009 © Stepmex (a.k.a. $tepashka) for v-web.ru forum (нашел в архивах на внешнем жестком диске)

[RD]ChezДата: Пятница, 09.04.2010, 20:13 | Сообщение # 2
Мастер джэдай
Группа: Продвинутые
Сообщений: 3687
Награды: 206
Город: St. P
Репутация: 0
Замечания: 20%
Статус:
Поднимаю тему.
Неужели нет желающих делать все по-человечески?
Те же паблики... Могли бы переделать скрипты под данный стандарт. Естественно с согласия автора.



1 час моей работы стоит минимум 800 рублей для срочных работ.
Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS.
Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы.
Немного ассемблер.
Ох**тельный верстальщик какб.

Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^

chezrd@gmail.com
lance@chez-lab.ru
Dima-kunДата: Пятница, 09.04.2010, 20:20 | Сообщение # 3
Группа: Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус:
[RD]Chez, в принципе идея не плоха. Надо сделать единобразие)


Мои работы:
[INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники,
[FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos,
[GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints


Сообщение отредактировал DizeL-ZR - Пятница, 09.04.2010, 20:21
[RD]ChezДата: Четверг, 15.04.2010, 15:29 | Сообщение # 4
Мастер джэдай
Группа: Продвинутые
Сообщений: 3687
Награды: 206
Город: St. P
Репутация: 0
Замечания: 20%
Статус:
Up. Всем скриптерам советую прочитать.


1 час моей работы стоит минимум 800 рублей для срочных работ.
Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS.
Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы.
Немного ассемблер.
Ох**тельный верстальщик какб.

Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^

chezrd@gmail.com
lance@chez-lab.ru
Alex009Дата: Четверг, 15.04.2010, 15:33 | Сообщение # 5
Уважаемый человек
Группа: Продвинутые
Сообщений: 917
Награды: 10
Репутация: 661
Замечания: 0%
Статус:
так же создать тему "Стандартизации RVars"


Controllable NPC developer
soProject developer


Сообщение отредактировал Alex009 - Четверг, 15.04.2010, 15:34
OKStyle™Дата: Четверг, 06.05.2010, 16:01 | Сообщение # 6
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2444
Награды: 16
Город: Оренбург
Репутация: 1174
Замечания: 40%
Статус:
И стандартизация описаний к модам. yes


Да потому что когда человек делает на заказ он не старается. © kRiSyo
Кланяимся нофаму королю анимаций =))))))) © Manusya
В MTA - для вас все багоюзеры. Не юзают там +с только EFO и ACF. © SeWeR
AlkatrasДата: Среда, 12.05.2010, 19:18 | Сообщение # 7
Освоившийся
Группа: Продвинутые
Сообщений: 145
Награды: 1
Город: USA
Репутация: 49
Замечания: 0%
Статус:
Quote (OKStyle™)
И стандартизация описаний к модам

А об этом можно подробнее, что за стандартизация?



Не бури во мне целку
OKStyle™Дата: Пятница, 14.05.2010, 06:25 | Сообщение # 8
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2444
Награды: 16
Город: Оренбург
Репутация: 1174
Замечания: 40%
Статус:
Alkatras, всё просто - готовится шаблон, по которому можно будет составлять описание модов.


Да потому что когда человек делает на заказ он не старается. © kRiSyo
Кланяимся нофаму королю анимаций =))))))) © Manusya
В MTA - для вас все багоюзеры. Не юзают там +с только EFO и ACF. © SeWeR
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua