Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

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

тут можно задать вопрос по скриптингу
rasta
Neophyte
Neophyte
Posts: 22
Joined: 06.07.2009 0:31

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

Post by rasta »

Извиняюсь, если подобное уже обсуждалось - поиск юзал..
Нужен аналог

Code: Select all

UO.exec('exec script')
Дело в том, что не все получается запихнуть в 1 скрипт - например гвардилка или проверка на наличие левых чаров в периметре ГК у меня работает отдельным скриптом (т.к. цикл непрерывный).. Прошу подсказать возможно ли реализовать это?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post 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
rasta
Neophyte
Neophyte
Posts: 22
Joined: 06.07.2009 0:31

Post by rasta »

Я немного не понимаю при чем глобальные перепенные к реализации моей задачи.. Как можно с их помощью сделать бесконечный цикл гвардилки (или еще чего-нибудь) в основном скрипте?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

ну так сделай непрерывным циклом в отдельном скрипте, и руками же его запускай, если уж так сильно хочется
rasta
Neophyte
Neophyte
Posts: 22
Joined: 06.07.2009 0:31

Post by rasta »

Vizit0r wrote:ну так сделай непрерывным циклом в отдельном скрипте, и руками же его запускай, если уж так сильно хочется
Мы вернулись к тому, что отдельный скрипт(поток) нужен в данном случае, и запускать его нужно все-таки руками :)
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

лично я никогда не делал отдельных скриптов.
если сильно надо - во всех циклах ожидания вставить вызов процедуры гвардилки, и все.

мне не нравится инжектовский принцип "а я сделаю 30 скриптов, и буду вызывать один из другого по кругу".
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

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

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

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

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

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

есть ли способ сделать такое на стелсе? есть же activescript list, значит можно что-то там еще запускать на одном чаре, но есть ли способ это сделать в рамках одного скрипта, не запуская по 2 скрипта каждый раз ручками?
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Post by Fenix »

Начнём по-еврейски.
Встречный вопрос. Почему нельзя поиск ПК реализовывать как функцию, которая вызывается в месте, где твой "основной поток" проверяет изменение глобальной переменной?
Как альтернатива - можно использовать ивенты, обрати внимание на evItemInfo. Ивентом отслеживаешь появление объекта или изменение его состояния, если объект - игрок и ПК, то можешь менять какую-нить переменную (или сразу реализовывать ответные действия на появление ПК).
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

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

С ивентами - интересно. Спасибо, посмотрю. Думал делать функцию на основе FindType, как и на инже. Не совсем понятно, правда, как ивенты использовать.
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Post by Fenix »

По ивентам есть небольшой пример. Не особо сложно, просто в обработчике ивента тебе будет подаваться ID предмета, по которому ты получаешь информацию. Вот уже из этого ID и пробуй выжать информацию.
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

в таких ситуациях ивенты намного лучше второго скрипта, ибо срабатывают моментально по приходу пакета.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

О, так это получается как раз то, что нужно. Спасибо большое, буду пробовать.
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

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

На помощь пришел evdrawobject. С ним четко отрабатывает, когда чар (пк) появляется (реколится рядом или заходит в игру).
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

потому что чар-нпц появляется, это другой ивент.
ищи описание ивентов, я перечислял на форуме, какой за что отвечает.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

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

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

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

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

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