--------------------------------------------------------------------------------
Что такое includes?
Код некоторых, часто вызываемых, процедур можно вынести за пределы основного кода скрипта поместив процедуру в файл с расширением *.inc в папке Stealth\Scripts\Include
Этот файл *.inc и называется инклюдом. Возможность их использования появилась начиная с Stealth v0.85 beta.
У меня там, в папке Stealth\Scripts\Include уже есть какие то файлы *.inc, что это?
Это стандартизированные общие инклюды, поставляемые вместе со Стелсом и написаные ранее Миралексом и другими игроками.
Список подобных инклюдов, а так же других инклюдов, не входящих в стандартный пакет, но тем не менее могущих оказаться полезными можно найти здесь: http://stealth.od.ua/forum/viewtopic.php?t=152
Как оно работает?
В самом скрипте, после описания переменных пишем {$Include 'путь+имя файла'}
Имя файла определяется по следующему алгоритму:
- Если полный путь, то загружаем файл по полному пути;
- Если относительный путь, то ищем файл относительно папки, откуда запущен скрипт или (если нету) - относительно папки Stealth\Scripts\Include
Иными словами если инклюд находится в папке Include то достаточно будет только имени файла.
Все, теперь мы можем в скрипте вызывать процедуру, содержащуюся в инклюде, с необходимыми нам параметрами.
Так надо вызывать каждый инклюд?
Нет, можно вызывать сразу несколько инклюдов. Чаще всего именно так и делают.
В самом скрипте, после описания переменных и т.п. мы пишем
Code: Select all
{$Include 'all.inc'}
Тем самым мы инициируем возможность вызова(использования) процедур из инклюдов включенных в файле all.inc
Если открыть all.inc то можно увидеть эти инклюды:
Code: Select all
{$Include 'checksave.inc'}
{$Include 'hungry.inc'}
{$Include 'checktargeterror.inc'}
{$Include 'WaitConnection.inc'}
{$Include 'stack.inc'}
То есть мы вызываем только один {$Include 'all.inc'}, а можем использовать все инклюды содержащиеся в нем.
У меня проблема с инклюдом hungry.inc, запустил скрипт и выдает ошибку.
Инклюдов hungry.inc, отвечающих за питание чара два вида, с разными процедурами:
- Hungry(NeededLevel : Integer; Container : Cardinal);
Здесь необходимо указать минимальную степень голодности и место где искать еду(backpack, ground или какой-нибудь контейнер);
Hungry(1,ground);
Hungry(1,backpack);
- Hungry(NeededLevel : Integer);
Эта процедура более автономна, необходимо только указать минимальную степень голодности, а место где искать еду она будет искать сама, сначала на земле, а потом в паке.
Hungry(1);
В общих стандартизированных инклюдах поставляемых вместе со Стелсом в последних версиях используется вторая процедура, она появилась позднее и почти все ранние скрипты написаны с использованием первой, особенности которой указаны выше. Я бы посоветовал инклюд не менять, а изменить параметр процедуры в скрипте, приведя его в соответствие с инклюдом.
Могу ли я сделать собственный инклюд?
Да! Пишете процедуру, сохраняете ее как your_name.inc, кидаете
в папку Stealth\Scripts\Include и можете ее использовать, отдельно или пакетно, предварительно включив ее в all.inc
Если вы считаете, что написанная процедура может пригодиться остальным пользователеям, то можно ее опубликовать здесь:
http://stealth.od.ua/forum/viewtopic.php?t=152
Естественно, с описанием того что она делает и с примером использования.
Зачем нужны includes?
Ну, как минимум для удобства чтения кода скрипта.
Нет необходимости делать изменения во всех скриптах, если можно вынести процедуру в include и если будет необходимость - менять только
его содержимое.