 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Стандартизация конфигурационных файлов
| |
| [ER]Chez | Дата: Воскресенье, 28.03.2010, 20:33 | Сообщение # 1 |
|
Уверенный в себе
Группа:
Пользователи
Сообщений: 250
Награды: 5
Город: Крыжопль
Репутация: 104
Замечания: 100%
Статус: 
| Как думаю многие заметили каждый мод имеет свои файлы, свои папки и все со своими наборами переменных и значений. У меня есть идея привести все моды к единому шаблону файлов, забудем про те моды и скрипты которые уже есть, но те которые будем разрабатывать привести к единому виду. Спросите "зачем", поясняю: столкнулся тут с проблемой совмещения админки и самого мода, а конкретно системы использовали одинаковые файлы и не могли работать совместно. На днях, точнее в прошлом месяце я написал систему позволяющая читать файл конфигурации так чтобы брать из него только необходимые строки, все остальное игнорируется, я готов поделиться этим кодом если народ согласиться все стандартизировать. Поясняю что за система: читается файл конфигурации сервера config.cfg и из него берутся только необходимые строки. подробно: сервер берет информацию только из строк предназначенных ему не обращая внимания на другие строки(количество строк не имеет значения) содержимое конфига на примере строки: [сщву]sv_logfile "1" /!вести логи[/сщву] где: sv_logfile - переменная котрую использует сервер "1" - значение переменной /!вести логи просто нечитаемые комменты в строке. Почему для коммента использованы символы /!? Да все просто, потому что в url адресах есть // и будет обрезание адреса Все переменные нужно привести к единому виду. В чем преимущество такой системы: на одном сервере можно использовать несколько модов без размножения числа серверов. Пропадут такие ошибки как лишний пробел в строке конфига или в неправильном порядке строк в конфиге. Отпадет проблема разбираться за что какая переменная в конфиге отвечает. Превосходство такой системы в её гибкости и практически полной независимости от пользователя, даже если он что-то не укажет или укажет неверно, значение будет выставлено по-умолчанию, а ему будет выдана ошибка или предупреждение. Поэтому я считаю внедрение такой системы среди студий и опытных скриптеров поможет многим. К примеру имеем на сервере 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%
Статус: 
| И стандартизация описаний к модам.
Да потому что когда человек делает на заказ он не старается. © 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
|
| |
|
|
|
 |
|
 | |
| |
|