|
|
|
Канал X2: The Threat: «Скриптами делимся, скриптами» |
|
|
GTJafar
135 EGP
  Рейтинг канала: 1(2) Репутация: 4 Сообщения: 378 Откуда: Новосибирск Зарегистрирован: 11.03.2004
 |
|
Цитата: |
Может возможность остановки данного скрипта его автором вовсе не предусмотрена...
|
Может есть какие-нибудь команды, а? Типа kill all?
А после запуска, запущеные скрипты в сейвах тырсятся? Или удалив их из соответствующей папки после перезапуска игры можно их не боятся?
_________________ Семь раз проверь - один раз поверь (R) |
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Запущенный 1 раз скрипт уже в сейве... посмертно.
Цитата: |
Может есть какие-нибудь команды, а? Типа kill all?
|
Кое-какие команды есть, но все зависет от скрипта и от того как он был запущен.
И ты так и не ответил: какой это скрипт? Если хочешь помощи, будь добр опиши свою проблему сначала. Можешь просто выслать мне скрипт на мыло a-k-m@nm.ru с описанием КАК ты его запускал.
ЗЫ. Глянул в вопросницу. Скрипт StationAccountant, в архиве был только 1 xml-файл? Скажи на чем его запускал, на null или на станции?
|
|
|
Grey Wolf
500 EGP
    Рейтинг канала: 2(17) Репутация: 115 Сообщения: 1677 Откуда: Ростов-на-Дону Зарегистрирован: 31.03.2003
 |
|
Блин, да любой скрипт можно прибить.
1. скрипты с именем init*.xml достаточно просто удалить из папки скрипт, и они больше запускаться не будут
2. скрипт, запущенный в вакууме (не на объекте), можно посмотреть в меню Global script task и кнопкой del оттуда удалить. В оригинальной игре там никаких скриптов быть не должно.
3. На объекте, у которого доступно командное меню, даете команду none
4. На объекте, у которого командного меню нет, достаточно запустить скрипт из одной строчки Return null. Это в случае, если убиваемый скрипт имел приоритет 0 (ставится по умолчанию). Если же скрипт, который надо прибить, имеет приоритет > 0, то в скрипт-киллер надо перед Return null добавить строчку set script prio 10000.
_________________ Быстро выпитая рюмка не считается налитой |
|
|
W
151 EGP
  Рейтинг канала: 1(4) Репутация: 16 Сообщения: 583
Зарегистрирован: 14.04.2004
 |
|
Ставлю Autologistiс. Команда 1 (ресурсы свои, если нет то компа) ресурс батарейки, после чего транспорты слетаются на батареечницы, загружаются и сидят, перебирая скрипты. Станция назначения выбирается, действие = нет.
_________________ Каждый дурак знает, что до звезд не достать, а умные, не обращая внимания на дураков, пытаются. |
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Цитата: |
Блин, да любой скрипт можно прибить.
|
Не любой. Если скрипт вызван с префиксом START, (либо вызов любого скрипта из скрипта что запущен с этим префиксом), то его нельзя убить (даже с priority 10000). Его нет и в Global script tasks.
2 W
А можно прямую ссылку на тот Autologistiс, что ты поставил себе?
|
|
|
GTJafar
135 EGP
  Рейтинг канала: 1(2) Репутация: 4 Сообщения: 378 Откуда: Новосибирск Зарегистрирован: 11.03.2004
 |
|
Цитата: |
И ты так и не ответил: какой это скрипт? Если хочешь помощи, будь добр опиши свою проблему сначала. Можешь просто выслать мне скрипт на мыло a-k-m@nm.ru с описанием КАК ты его запускал.
ЗЫ. Глянул в вопросницу. Скрипт StationAccountant, в архиве был только 1 xml-файл? Скажи на чем его запускал, на null или на станции?
|
Попробую его обработать по методу Grey Wolfa, а тебе пока скину. Он кстати косячный был (хоть и New), я его подправил, но циклы не трогал! По поводу null или нет не помню, кажись null. Тебе токо косячный могу скинуть (т.к. на работе), там в первом условном операторе ошибка, вместо playercredits надо credits.
_________________ Семь раз проверь - один раз поверь (R) |
|
|
Grey Wolf
500 EGP
    Рейтинг канала: 2(17) Репутация: 115 Сообщения: 1677 Откуда: Ростов-на-Дону Зарегистрирован: 31.03.2003
 |
|
akm : |
Цитата: |
Блин, да любой скрипт можно прибить.
|
Не любой. Если скрипт вызван с префиксом START, (либо вызов любого скрипта из скрипта что запущен с этим префиксом), то его нельзя убить (даже с priority 10000). Его нет и в Global script tasks.
|
А мона поподробнее?
Ты функцию START Сommand (к которой предварительно в скрипте init подцеплен скрипт) имеешь ввиду?
|
|
|
Alekc
96 EGP
 Репутация: 3 Сообщения: 141 Откуда: Москва Зарегистрирован: 21.04.2004
 |
|
Цитата: |
2. скрипт, запущенный в вакууме (не на объекте), можно посмотреть в меню Global script task и кнопкой del оттуда удалить. В оригинальной игре там никаких скриптов быть не должно.
|
А где это меню "Global script task" ? В версии 1.3, правда русской (by DMC), такого пункта в редакторе скриптов нет...
|
|
|
Grey Wolf
500 EGP
    Рейтинг канала: 2(17) Репутация: 115 Сообщения: 1677 Откуда: Ростов-на-Дону Зарегистрирован: 31.03.2003
 |
|
Alekc : |
А где это меню "Global script task" ? В версии 1.3, правда русской (by DMC), такого пункта в редакторе скриптов нет...
|
В космосе Shift+C, S - открывается меню, в котором редактор скриптов первой строчкой, а Global script task - предпоследней.
|
|
|
Mr.Aloof
|
|
Alekc : |
Цитата: |
2. скрипт, запущенный в вакууме (не на объекте), можно посмотреть в меню Global script task и кнопкой del оттуда удалить. В оригинальной игре там никаких скриптов быть не должно.
|
А где это меню "Global script task" ? В версии 1.3, правда русской (by DMC), такого пункта в редакторе скриптов нет...
|
Как так???
В первом меню, где первая строка - вход в редактор,
ниже идут пункты типа вести лог/трассировку скриптов на объекте, смотреть ентот лог, а самый нижний - этот самый пункт и должОн быть!
|
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Цитата: |
А мона поподробнее?
Ты функцию START Сommand (к которой предварительно в скрипте init подцеплен скрипт) имеешь ввиду?
|
Нет, с START Сommand все в порядке. Это я про стандартный вызов с помощью call script. Там вместо Return Value можно указать префикс START, тогда вызванный скрипт будет выполняться отдельным процессом, похоже без какой-либо привязки вообще.
Иногда полезно, т.к. скрипт, из которого был вызов, при этом не прервется, а тоже будет дальше выполнятся в параллель (ну не совсем конечно, но ни мне тебе про wait рассказывать ).
Причем пробовал ставить ему приоритет 0, все равно его остановить никак нельзя
Вот пример
Допустим Скрипт1 заканчивается на строки:
@ START [THIS] -> call script Скрипт2
return null
Скрипт2:
set script priority to 0
START [THIS] -> command COMMAND_DOCKAT
return null
Так вот, Скрипт1 и Скрипт2 завершаться сразу, а вот !ship.cmd.movestation.std (что закреплен за COMMAND_DOCKAT) останется в подвешенном состоянии, пока корабль не доберется до заданной station. И даже если дать этому кораблю команду NONE, все равно его не остановить.
|
|
|
Alekc
96 EGP
 Репутация: 3 Сообщения: 141 Откуда: Москва Зарегистрирован: 21.04.2004
 |
|
Цитата: |
В первом меню, где первая строка - вход в редактор,
ниже идут пункты типа вести лог/трассировку скриптов на объекте, смотреть ентот лог, а самый нижний - этот самый пункт и должОн быть!
|
Самый нижний у меня - "Помошь"...
|
|
|
Mr.Aloof
|
|
akm : |
Нет, с START Сommand все в порядке. Это я про стандартный вызов с помощью call script. Там вместо Return Value можно указать префикс START, тогда вызванный скрипт будет выполняться отдельным процессом, похоже без какой-либо привязки вообще.
Иногда полезно, т.к. скрипт, из которого был вызов, при этом не прервется, а тоже будет дальше выполнятся в параллель (ну не совсем конечно, но ни мне тебе про wait рассказывать ).
Причем пробовал ставить ему приоритет 0, все равно его остановить никак нельзя
|
Во-во! я тоже столкнулся с такой проблемой
Действительно отдельный процесс получается ,
и никак его не убить, пока сам не умрет...
|
|
|
S.V.N
97 EGP
 Репутация: 7 Сообщения: 149
Зарегистрирован: 14.03.2004
 |
|
Grey Wolf : |
Вот новый патрульный скрипт
|
И от меня прими пасибки. С новым скриптом зависаний пока не наблюдается.
|
|
|
W
151 EGP
  Рейтинг канала: 1(4) Репутация: 16 Сообщения: 583
Зарегистрирован: 14.04.2004
 |
|
to akm
http://Ссылки на narod.ru запрещены! Используйте пожалуйста другие, более нормальные хостинги./AutoLogistic.v1.0.zip
_________________ Каждый дурак знает, что до звезд не достать, а умные, не обращая внимания на дураков, пытаются. |
|
|
Grey Wolf
500 EGP
    Рейтинг канала: 2(17) Репутация: 115 Сообщения: 1677 Откуда: Ростов-на-Дону Зарегистрирован: 31.03.2003
 |
|
akm : |
И даже если дать этому кораблю команду NONE, все равно его не остановить.
|
Даже если это свой корабль??
Повожусь, посмотрю, чем такие процессы прибить можно. В конце концов есть же функции interrupt script и еще некоторые, мож они помогут?
Ну а пока гарантированно могу утверждать, что если уж совсем припечет, такой скрипт можно прибить вместе с кораблем. Команда destruct спасет отца русской демократии
Спасиб за подробный ответ
Тогда еще к тебе вопрос на засыпку:
не знаешь ли ты, чем определяется порядок запуска скриптов init из папки scripts? По алфавиту, али еще как?
_________________ Быстро выпитая рюмка не считается налитой |
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Цитата: |
Даже если это свой корабль??
|
Да
Цитата: |
Повожусь, посмотрю, чем такие процессы прибить можно. В конце концов есть же функции interrupt script и еще некоторые, мож они помогут?
|
Не теряй зря времени. Я уже все перепробовал. Да и проблемы как таковой нет. Я придумал другой способ распараллеливания: с помощью Send SIGNAL.
Цитата: |
Команда destruct спасет отца русской демократии
|
Будешь смеятся, но и destruct не всегда помогает Я же не просто так в примере выше использую в Скрипте2 команду Start Command CMD_DOCKAT вместо Call Script "movetostation.std"
Хотя делают эти конструкции одно и то же, но в 1-м случае выход из Скрипта2 происходит сразу (следующая строка return null выполняется сразу), а во 2-м случае заверешение Скрипта2 произойдет только после завершения скрипта "movetostation.std".
Теперь кульминация: убиваем корабль, что летел под вызванным таким образом скриптом "movetostation.std", смотрим в список запущенных скриптов в едиторе и видим: Скрипт2 все еще выполняется! Ну а в списке глобальных скриптов его естественно нет и вообще остановить его уже никак нельзя!!!
Цитата: |
чем определяется порядок запуска скриптов init из папки scripts?
|
1. Глобальные скрипты:
!init.ship.commandupgrade
!init.ship.globalscriptmap
2. Далее запускаются скрипты, начинающиеся на init, кроме скриптов init.ship.***** Порядок пока мне не известен.
3. Загрузка Галактики (очень важно!!! скрипты из п.1 и 2 и все скрипты, вызванные из них, не могут оперировать с объектами вселенной Х2, т.к. ни один из объектов еще не загружен!)
4. !plugin.autotrade.init (принцип именования этих скриптов опять же не известен, и похоже п.4 добавился лишь в версии 1.3)
Данные скрипты (по крайней мере 1-й запущенный в п.4) должны начинаться строкой:
@ = wait 1 ms
Думаю уже можно найти кое-какую документацию, чтобы заполнить пробелы. Я пока просто еще не успел... написал, что уже знаю.
Дополнение:
Пробовал создать скрипты вида:
plugin.test.init и
!plugin.test.init
Они автоматом не запускаются! В то же время нет вызова !plugin.autotrade.init ни из одного из скриптов! Т.е. он запускается именно автоматом при инициализации SCE
|
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Кстати могу рассказать про функцию interrupt with script, иногда может оказаться полезной.
Назначение - то же что и у call script. Но дополнительно указывается приоритет и не происходит прерывания выполнения основного скрипта в момент вызова. Пример:
Код: |
..........
011 [THIS] -> interrupt with script 'ScriptTest' and prio 1000
012 write to player logbook 'MainScript. Line 012'
013 @ = wait 1 ms
014 write to player logbook 'MainScript. Line 014'
015 return null |
ScriptTest:
Код: |
001 write to player logbook 'ScriptTest. Line 001'
002 @ = wait 5000 ms
003 write to player logbook 'ScriptTest. Line 003'
004 return null |
Работать это все будет таким хитрым образом:
Вызов 'ScriptTest' произойдет при условии, что указанный приоритет 1000 больше приоритета 'MainScript' в момент выполнения строки 011. Далее, 'ScriptTest' еще не выполняется (!) а лишь поставлен в очередь и следующими выполнятся строки 012 и 013.
Тем не менее, строка 013 содержит "@", т.е. является прерываемой, и на этом выполнение основного скрипта прервется, пока скрипт 'ScriptTest' полностью не завершится. Даже не смотря на строку 002, в которой здоровенная задержка, строка 014 выполнена не будет, пока нет возврата из 'ScriptTest'.
Т.е. с помощью interrupt with script вовсе нельзя что-либо прервать, кроме текущего скрипта (где эта команда записана), и то это временная приостановка выполнения.
Вот еще интересно было бы снизить приоритет 'ScriptTest' непосредственно перед паузой в 002, выполнится ли 014? Попробую.
Пока нет нормальной документации (и будет ли она вообще когда-либо?) , приходится такие вот детские эксперименты проводить
|
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Попробовал поставить команду set script priority to 0 перед строкой 002. При этом приоритет основного скрипта выставил в 999. Результат: все равно ни одной команды из основного скрипта не будет выполнено до тех пор, пока 'ScriptTest' не завершен.
Эксперимент 2. Перед строкой 011 ставим set script priority to 2000, а после 011 вставляем set script priority to 0. Результат: команда interrupt with script просто игнорируется.
Т.е. смысла в использовании interrupt with script вместо call script теперь я не вижу вообще... спрашивается для чего ее Эгософт придумал?
|
|
|
Mr.Aloof
|
|
Господа Пилоты! А кто-нить знает как формируется codearray в файле скрипта (xml)? Про описание переменных и констант в строках понятно, а вот команды, похоже, заданы кодами которые я пока не могу понять , а времени на нормальный анализ нет...
Эт я к чему: очень хочется свой редактор скриптов написать
А могет кто написал уже???
|
|
|
|
|
|
Канал X2: The Threat: «Скриптами делимся, скриптами» |
|