Page 1 of 3

запуск скрипта из скрипта

Posted: 07.07.2009 12:42
by rasta
Извиняюсь, если подобное уже обсуждалось - поиск юзал..
Нужен аналог

Code: Select all

UO.exec('exec script')
Дело в том, что не все получается запихнуть в 1 скрипт - например гвардилка или проверка на наличие левых чаров в периметре ГК у меня работает отдельным скриптом (т.к. цикл непрерывный).. Прошу подсказать возможно ли реализовать это?

Posted: 07.07.2009 12:47
by Vizit0r
http://stealth.od.ua/forum/viewtopic.php?t=1012
пунк 4 первого поста - смотри ответы на него.

я ruffa в этом плане полностью поддерживаю

а реализовать - вполне возможно, например через Global variables
смотреть SetGlobal, GetGlobal
http://stealth.od.ua/forum/viewtopic.php?t=1220

Posted: 07.07.2009 13:04
by rasta
Я немного не понимаю при чем глобальные перепенные к реализации моей задачи.. Как можно с их помощью сделать бесконечный цикл гвардилки (или еще чего-нибудь) в основном скрипте?

Posted: 07.07.2009 13:14
by Vizit0r
ну так сделай непрерывным циклом в отдельном скрипте, и руками же его запускай, если уж так сильно хочется

Posted: 07.07.2009 13:17
by rasta
Vizit0r wrote:ну так сделай непрерывным циклом в отдельном скрипте, и руками же его запускай, если уж так сильно хочется
Мы вернулись к тому, что отдельный скрипт(поток) нужен в данном случае, и запускать его нужно все-таки руками :)

Posted: 07.07.2009 14:55
by Vizit0r
лично я никогда не делал отдельных скриптов.
если сильно надо - во всех циклах ожидания вставить вызов процедуры гвардилки, и все.

мне не нравится инжектовский принцип "а я сделаю 30 скриптов, и буду вызывать один из другого по кругу".

Posted: 03.03.2011 18:11
by chobi0ne
Извиняюсь, что поднимаю старую тему, но дабы не создавать новую - похожий вопрос. Я недавно пересел на стелс (сменил шард, тут со стелсом проблем нет, поэтому решил переделать все под него, потихоньку изучаю). Так вот, у меня все скрипты на добычу используют два треда (в инже):
main
checkingplayers

также иногда прикручиваю реконнектор, но это в стелсе с этим проблем нет.

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

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

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

есть ли способ сделать такое на стелсе? есть же activescript list, значит можно что-то там еще запускать на одном чаре, но есть ли способ это сделать в рамках одного скрипта, не запуская по 2 скрипта каждый раз ручками?

Posted: 03.03.2011 19:21
by Fenix
Начнём по-еврейски.
Встречный вопрос. Почему нельзя поиск ПК реализовывать как функцию, которая вызывается в месте, где твой "основной поток" проверяет изменение глобальной переменной?
Как альтернатива - можно использовать ивенты, обрати внимание на evItemInfo. Ивентом отслеживаешь появление объекта или изменение его состояния, если объект - игрок и ПК, то можешь менять какую-нить переменную (или сразу реализовывать ответные действия на появление ПК).

Posted: 03.03.2011 19:29
by chobi0ne
Fenix wrote:Начнём по-еврейски.
Встречный вопрос. Почему нельзя поиск ПК реализовывать как функцию, которая вызывается в месте, где твой "основной поток" проверяет изменение глобальной переменной?
Как альтернатива - можно использовать ивенты, обрати внимание на evItemInfo. Ивентом отслеживаешь появление объекта или изменение его состояния, если объект - игрок и ПК, то можешь менять какую-нить переменную (или сразу реализовывать ответные действия на появление ПК).
Видимо так и прийдется. Постоянно вызывать.

С ивентами - интересно. Спасибо, посмотрю. Думал делать функцию на основе FindType, как и на инже. Не совсем понятно, правда, как ивенты использовать.

Posted: 04.03.2011 6:57
by Fenix
По ивентам есть небольшой пример. Не особо сложно, просто в обработчике ивента тебе будет подаваться ID предмета, по которому ты получаешь информацию. Вот уже из этого ID и пробуй выжать информацию.

Posted: 04.03.2011 15:38
by Vizit0r
в таких ситуациях ивенты намного лучше второго скрипта, ибо срабатывают моментально по приходу пакета.

Posted: 04.03.2011 17:34
by chobi0ne
О, так это получается как раз то, что нужно. Спасибо большое, буду пробовать.

Posted: 09.03.2011 1:28
by chobi0ne
Попробовал. Сделал через eviteminfo. Если чар двигается - все ок. Если реколишься в шахту и там кто-то есть - все ок. А если чар (ПК) прилетает на экран и НЕ двигается, то ивент не срабатывает. А это критично.

На помощь пришел evdrawobject. С ним четко отрабатывает, когда чар (пк) появляется (реколится рядом или заходит в игру).

Posted: 09.03.2011 9:38
by Vizit0r
потому что чар-нпц появляется, это другой ивент.
ищи описание ивентов, я перечислял на форуме, какой за что отвечает.

Posted: 09.03.2011 15:05
by chobi0ne
Vizit0r wrote:потому что чар-нпц появляется, это другой ивент.
ищи описание ивентов, я перечислял на форуме, какой за что отвечает.
Да, я к этому и пришел. Спасибо за советы.

В общем хорошая и стабильная детектилка игроков/мобов получилась при использовании следующих ивентов:
evSpeech - Отвечает за касты, можно проверять всякие стенки, блейдспириты, лайты и прочее.
evDrawObject - Следит за появлением чара (после рекола или логина).
evItemInfo - Любые перемещения.

Если использовать все три ивента, то получается очень даеж хорошо.

Эта тема неочень раскрыта, почему-то. В поиске помимо примера с аськой ничего нет. Такое ощущение, будто этим пользуется ограниченный круг лиц, хотя вы, ребята, много где упоминали про ивенты. А может просто все по старинке всовывают постоянные проверки с файндтайпом.

Классная штука эти ивенты.