До того как вышел POL 0.76, внешний вид файловой системы
скриптов, пожалуй, был похож не на систему, а скорей на
"кучу-малу" всевозможных файлов и папок но, начиная с новой
версии, дело капитально изменилось. 76-ой POL обрадовал новой
структурой файлов - многие десятки скриптов заняли своё новое -
удобное место. :)
Если вернутсь в наше время из долёкого 1999 года, и посмотреть в
корень папки POL, можно увидеть 2 папки: scripts и configs,
именно в первой находятся скрипты сервера, а во второй находятся
файлы настройки к ним. Но в виду того, что файлов для POL'а
достаточно много, становится трудно работать с ними или находить
что-то нужное для себя. В целях как-то помочь разработчикам
сервера была изобретена System Package.
Можно написать, к примеру, новый скилл, плюс несколько файлов -
или наоборот очень много файлов, которые понадобятся для работы
скрипта (itemdesc.cfg, newskill.src, readme.txt и тд), а Package
System позволит их разместить в одной папке, что соответственно
значительно облегчит в будущем любую работу с файлами.
В POL'е есть 2 типа package:
pkg/std - "стандартные пэкейдж", такие как респаунеры, скиллы,
система дня и ночи и т. п., все пэкейджи по умолчанию включены.
pkg/opt - "дополнительные пэкейдж", пэкейджи которые можно
включать и отключать по собственному усмотрению. Дополнительные
пакеты иногда зависят от стандартных или других дополнительных
скриптов (например, не запускаясь без них). Так же рекомендуется
все новые скрипты размещать именно в этот тип пэкейджов.
Прежде всего, новый package - это отдельная папка, размещенная в
папку pkg/opt. Причем папка может быть размещенная как в корень
(например pkg/opt/newspell) так и в подпапку существующей
(например pkg/opt/spells/newspell).
Каждый пэкейдж должен включать файл pkg.cfg - файл описания,
который имеет следующий формат:
"Enabled [0/1]"
"Name [pkgname]"
"Version [ver]"
"Requires [pkgname] [ver]"
"Conflicts [pkgname]"
"CoreRequired [ver]"
“Replaces [pkgname]”
"Maintainer [name]"
"Email [email]"
"URL [url]"
"FTP [url]"
Enabled [0/1]
Если 1 - то пэкейдж работает, в обратном случаи - если 0,
пэкейдж полностью игнорируется системой.
Name [pkgname]
Название Пэкейджа, название должно быть таким же как и название
папки в которой размещены файлы.
Все остальные строки необезательные, но тем не менее их
желательно включать в ваш pkg.cfg для увиличения информативности
файла:
Version [ver]
Версия пэкейджа, к примеру, 1.0, 2.3b, v.1.5.
Requires [pkgname] [ver]
Требуемый для работы package и его версия. Возможно
использования этой строки несколько раз.
Conflicts [pkgname]
Название конфликтующего скрипта, запуск с которым будет
невозможен. Заметьте - версию конфликтующего пакета записывать
не надо. Возможно использования этой строки несколько раз.
CoreRequired [ver]
Версия POL'а, необходимая для активизации скрипта, причем ноль
перед цифрой опускается (например "CoreRequired 94").
Replaces [pkgname]
Название пэкейджа – который надо полностью заменить, при этом
данный пэкейдж перестаёт работать.
Эти строки вообще не обезательны - т. к. система их полностью
игнорирует, однако информативность файла еще больше возрастёт:
Maintainer [name]
Имя или Ник главного автора/поставщика.
Email [email]
E-mail адрес по которому можно связаться с автором.
URL [url]
HTTP адрес странички, на которой можно получить больше
информации.
FTP [url]
FTP адрес - откуда можно скачать файлы тематически относящиеся к
пэкейджу.
Тип используемых файлов внутри пэкейджа может быть любым, и все
файлы можно размещать в одной папке, что обеспечит аналогичной
структуре корневой папке pol где все разбито по разныи папкам.
Однако скрипты командных уровней (cmdlevel скрипты) придётся
разместить аналогично папки pol/scripts (к примеру
"pkg/opt/spells/myspell/textcmd/admin"). Однако использование
пэкейджов усложняет эксплуатацию функции ReadConfigFile(). Если
раньше необходимые конфиги все лежали в папке pol/congigs, то
теперь они разложены по многочисленным пэкейджам. Для поиска
необходимого CFG файла есть следующий формат:
ReadConfigFile( "cfgname" )
- Если скрипт НЕ в пэкейдже, cfgname должен выглядеть -
/config/[cfgname].cfg
- Если скрипт В пэкейдже, cfgname должен выглядеть -
[cfgname].cfg
ReadConfigFile( ":pkgname:cfgname" )
- Поиск файла [pkgdir]/[cfgname].cfg
ReadConfigFile( "::cfgname" )
- Поиск файла pol/config/[cfgname].cfg
Кстати синтаксис функции ReadConfigFile() так же подойдет для
функций start_script()(по отношению к src файлам) и
UnloadConfigFile().
Статью прислал: Xeo