|
|
|
Канал X3: Reunion »
Модовый и скриптовый отсек X3: Reunion: «Скриптописание - делимся опытом, задаем вопросы» |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) Репутация: 25 Сообщения: 375
Зарегистрирован: 20.05.2003
 |
|
Господа, каким образом можно уничтожить звезду в секторе с помощью скриптовых команд? Ато <RefObj> destruct: show no explosion=<Var/Number> вызывает вылет игрушки с ошибкой.(ссылка на солнце есть)
добавлено спустя 1 минуту:
з.Ы.: Я так понял, что в х3 повыковыривали все типы светил, оставив только первый. Почему? + при попытке поставить отличный от 1 subtype, игра вылетает.
_________________ То пропадаю, то снова появляюсь
Последний раз редактировалось: CTPELOK (16:17 22-02-2008), всего редактировалось 1 раз |
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
G-Nome : |
Как вот такой скрипт поставить на горячую клавишу:
$ship = [THIS]
$x = $position [ 0 ]
$y = $position [ 1 ]
$z = $position [ 2 ]
$sec = $position [ 3 ]
* $x = $position -> get x position
* $y = $position -> get y position
* $z = $position -> get z position
* $sec = $position -> get sector
$x = $x + 1500
$needen = $ship -> needed jump drive energy for jump to sector $sec
$enchk = $ship -> get amount of ware Energy Cells S_1 in cargo bay
= $ship -> add $needen units of Energy Cells S_1
$en = $ship -> get amount of ware Energy Cells S_1 in cargo bay
if $en < $needen
play sample: incoming transmission 1 , from object null
write to player logbook "You dont have enough energy onboard"
return null
end
= $ship -> call script "!move.jump" : gate or sector=$sec, followers should jump too=[TRUE],
$ship -> set position: x= $x y= $y z= $z
return null
Пробовал по-разному, основываясь на других скриптах, но добился только появления кнопки с нужным названием(при нажатии бормочет "нас приветствуют Подозрение. ")
|
1. По горячим клавишам - вот, http://www.elite-games.ru/conference/viewtopic.php?p=1835633#1835633, надеюсь понятно.
2. Не используй [THIS], т.к. вызов скрипта по горячей клавише он вызывается не в привязке к кораблю. Он вызывается глобально, следовательно [THIS] = null.
3. Если скрипт должен обрабатывать корабль игрока - то используй [PLAYERSHIP]
4.Откуда у тебя берутся значения в $position? Я так понял - это параметры скрипта ? Тогда тебе лучше идти не черз горячую клавишу, а через меню команд.(Тоже недавно обсуждалось). И тогда исчезнет проблема с [THIS].
И кстати, не стоит использовать $ship -> set position: x= $x y= $y z= $z , лучше вызвать $ship -> call script "!move.movetoposition" :
_________________ Умножим энтропию на 0 :-) |
|
|
G-Nome
|
|
Chem : |
4.Откуда у тебя берутся значения в $position? Я так понял - это параметры скрипта ?
|
это скрипт plugin.banshee.gatelessjump из набора читов.В меню он прекрасно работает, но хочется на гор. клавишу, чтоб в менюшках не ковырятся. Кстати приставка plugin значение имеет?
Попробовал, не вышло.Теперь вообще ничего не говорит и ничего не происходит. Если использовать movetoposition корабель просто набирает скорость и не сбрасывает ее Если сможешь написать для меня такой скрипт, буду очень благодарен!
|
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
G-Nome : |
Если сможешь написать для меня такой скрипт, буду очень благодарен! Улыбка
|
Разобраться помогу, да и народ, я думаю подключится, а писать - нет, извини.
_________________ Умножим энтропию на 0 :-) |
|
|
G-Nome
|
|
Chem : |
Разобраться помогу, да и народ, я думаю подключится, а писать - нет, извини.
|
Все равно спасибо. Я ставил другие скипты аналогичного свойства (Advaced Jumpdrive 1.5), ситуация та же. Может это от версии игры зависить? Стоит 1.2+кумулятивный патч до 2.5 и русик с сайта.
добавлено спустя 3 минуты:
Делает прыжок по координатам. из меню пашет, а при попытке поставить на гор. клавишу борт-тетка говорит "нас приветствуют" и все
|
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) Репутация: 25 Сообщения: 375
Зарегистрирован: 20.05.2003
 |
|
Возможно ли с помощью скриптов влиять на производственый цикл станции? Останавливать, запускать, ускорять, замедлять? Я что-то не нашел ничего похожего в хелпе.
_________________ То пропадаю, то снова появляюсь |
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
CTPELOK : |
Останавливать, запускать
|
Да. Наводящее слово "trade and production tasks". Это типа квест - ищи .
CTPELOK : |
ускорять, замедлять
|
нет, только меня состав ресурсов и продукции.
_________________ Умножим энтропию на 0 :-) |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) Репутация: 25 Сообщения: 375
Зарегистрирован: 20.05.2003
 |
|
Вопрос еще. Каким образом можно реализовать автозапуск скрипта при создании станции? Допустим, игрок построил станцию, сразу после ее появления на ней должен заработать скрипт. Есть ли способ отличный от периодического поиска станций игрока и проверки, запущен ли скрипт (кстати, как можно проверить, запущен ли скрипт на станции?) и по надобности запускать?
_________________ То пропадаю, то снова появляюсь |
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
CTPELOK : |
Каким образом можно реализовать автозапуск скрипта при создании станции? Допустим, игрок построил станцию, сразу после ее появления на ней должен заработать скрипт. Есть ли способ отличный от периодического поиска станций игрока и проверки, запущен ли скрипт
|
Нет.
CTPELOK : |
кстати, как можно проверить, запущен ли скрипт на станции?) и по надобности запускать
|
<RetVar/IF><RefObj> is task <Var/Number> in use
<RetVar/IF><RefObj> is script <Script Name> on stack of task=<Var/Number>
попробуй посмотреть бомбардира, я там проверяю скрипты турелей.
_________________ Умножим энтропию на 0 :-) |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) Репутация: 25 Сообщения: 375
Зарегистрирован: 20.05.2003
 |
|
Жалко. Надо будет как-то намекнуть егософтовцам, чтобы в скриптах более удачно реализовали обработчики событий.
спасиб за совет.
Chem : |
попробуй посмотреть бомбардира
|
В своих-то исходниках не всегда разобраться могу, а в чужих )))))))
_________________ То пропадаю, то снова появляюсь |
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
CTPELOK : |
В своих-то исходниках не всегда разобраться могу, а в чужих )))))))
|
Было так:
Код: |
752 else if $script.current == 'turret.attackALLBrigeTarget.sv'
753 if $script.mode == 'get.turret.script'
754 $script.on.stack = $THIS -> is script 'turret.attackALLBrigeTarget.sv' on stack of task=$turret.i
755 else if $script.mode == 'set.turret.script'
756 $THIS -> start task $turret.i with script 'turret.attackALLBrigeTarget.sv' and prio 0: arg1=$turret.i arg2=null arg3=null arg4=null arg5=null
757 $turret.script.set = $THIS -> is script 'turret.attackALLBrigeTarget.sv' on stack of task=$turret.i
758 break
759 end
|
_________________ Умножим энтропию на 0 :-) |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) Репутация: 25 Сообщения: 375
Зарегистрирован: 20.05.2003
 |
|
С помощью скрипта хотел перечислить все фабрики игрока. Но в сообщении появляется только строчка "some" и кнопка "ок"... Больше ничего. Что в коде не так, подскажите пожалуйста?
Код: |
$StationArray = array alloc: size= 10
$StationArray = get station array: of race Player class/type= Factory
$message = "some\n"
$i = size of array $StationArray
while $k <= $i
$temp = $StationArray [ $k ]
$message = $message + $k + "element value=" + $temp + "\n"
$k = $k + 1
end
send incoming message $message to player: display it= [TRUE]
|
_________________ То пропадаю, то снова появляюсь
Последний раз редактировалось: CTPELOK (11:45 09-03-2008), всего редактировалось 1 раз |
|
|
sergej4341
460 EGP
  Рейтинг канала: 5(139) Репутация: 148 Сообщения: 1593 Откуда: Химки/Брест Зарегистрирован: 16.01.2004
 |
|
StationArray = array alloc: size= 10 ///не нужна
$StationArray = get station array: of race Player class/type= Factory
$message = "some\n"
$i = size of array $StationArray
/// необходима строка $k = 1 без нее $k = null и цикл не делает ни одного прохода
while $k <= $i
$temp = $StationArray [ $k ]
$message = $message + $k + "element value=" + $temp + "\n"
$k = $k + 1 ///красивей и правильней inc $k =
end
send incoming message $message to player: display it= [TRUE]
_________________ нажал клав. и затаил дыхание |
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
Или проще и правильнее:
Код: |
$StationArray = get station array: of race Player class/type= Factory
$i = size of array $StationArray
$message="";
while $i
dec $i
$temp = $StationArray [ $i ]
$message = sprintf: fmt="%s: element value=%s\n%s",$i,$temp,$message,null,null
end
$message = sprintf: fmt="some\n%s",$message,null,null,null,null
send incoming message $message to player: display it= [TRUE]
|
_________________ Умножим энтропию на 0 :-)
Последний раз редактировалось: Chem (19:44 09-03-2008), всего редактировалось 2 раз(а) |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) Репутация: 25 Сообщения: 375
Зарегистрирован: 20.05.2003
 |
|
sergej4341 : |
StationArray = array alloc: size= 10 ///не нужна
|
Это было написано, чтобы явно задать массив (думал, что из-за этого глюки)
sergej4341 : |
$k = $k + 1 ///красивей и правильней inc $k =
|
Написано тоже для профилактики глюков
sergej4341 : |
/// необходима строка $k = 1 без нее $k = null и цикл не делает ни одного прохода
|
Нифига себе, не мог даже и подумать.
Кстати, я не пойму как в скриптах реализованы типы переменных? Они как бы и есть, но их как бы и нет. В любом случае, спасибо за подсказку.
_________________ То пропадаю, то снова появляюсь |
|
|
sergej4341
460 EGP
  Рейтинг канала: 5(139) Репутация: 148 Сообщения: 1593 Откуда: Химки/Брест Зарегистрирован: 16.01.2004
 |
|
CTPELOK : |
Нифига себе, не мог даже и подумать.
|
встроенный дебаггер в руки и вперед
CTPELOK : |
Кстати, я не пойму как в скриптах реализованы типы переменных? Они как бы и есть, но их как бы и нет.
|
а поточнее? что именно не понятно?
действительно, они как бы есть и их как бы нет, но если при передаче скрипту аргументов (при его запуске из работающего скрипта) ошибиться с типами, то работать не будет
_________________ нажал клав. и затаил дыхание |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) Репутация: 25 Сообщения: 375
Зарегистрирован: 20.05.2003
 |
|
sergej4341 : |
встроенный дебаггер в руки и вперед
|
Дебаггер вроде же как работает только для скриптов, запущенных на объектах. Глобальные скрипты дебагать у меня не получилось.
sergej4341 : |
а поточнее? что именно не понятно?
|
Ну принцип действия типов переменных. Например, чтобы сделать переменную строковой, нужно "инициализировать" ее просто запихнув туда текст. Но, например, если в переменную "$message" тупо запихнуть указатель на станцию, то он отображаться в сообщении не будет. Т.е. send incoming message $message to player: display it= [TRUE] не отобазит ничего, если перед этим в $message запхать просто указатель на станцию. А если $message = "some text" + $SomeStationPtr , то все будет нормально. Это же лишние действия.
Еще один вопрос: как прибить скрипт, запущенный на станции вручную? Не нашел нигде такой опции.
_________________ То пропадаю, то снова появляюсь
Последний раз редактировалось: CTPELOK (00:27 10-03-2008), всего редактировалось 1 раз |
|
|
sergej4341
460 EGP
  Рейтинг канала: 5(139) Репутация: 148 Сообщения: 1593 Откуда: Химки/Брест Зарегистрирован: 16.01.2004
 |
|
CTPELOK : |
Дебаггер вроде же как работает только для скриптов, запущенных на объектах.
|
так и есть, а что мешает запустить твой скрипт для отладки на объекте а после доведения до ума как глобальный?
а когда понадобится отлаживать скрипты работающие на неписях, то же ничего не получится пока не сделаешь объекту-неписю расу Player
CTPELOK : |
как прибить скрипт, запущенный на станции вручную? Не нашел нигде такой опции.
|
а ее и нет
пишешь свой скрипт-убийцу
= wait 100 ms
return null
смотришь в каком стеке работает требуемый скрипт и запускаешь свой например на своем корабле вот таким скриптом
необходимая станция -> start task необходимый стек with script скрипт-убийца and prio 200: arg1=null arg2=null arg3=null arg4=null arg5=null
return null
<RefObj> start task <Var/Number1> with script <Script Name> and prio <Var/Number2>: arg1=<Value1> arg2=<Value2> arg3=<Value3> arg4=<Value4> arg5=<Value5>
Запускает скрипт <Script Name> в стеке Task <Var/Number1> объекта <RefObj> с приоритетом <Var/Number2> и параметрами <Value1> ... <Value5>, при этом вытеснив (удалив) все остальные скрипты из этого же стека.
Внимание! Командой start task <Var/Number> with script ни в коем случае нельзя запускать скрипт в текущем стеке! (т.е. на том же объекте и том же Task, где запускается команда start task) Если это сделать, скрипт повиснет.
_________________ нажал клав. и затаил дыхание |
|
|
Арманкессилон
1740 EGP
             Рейтинг канала: 9(1184) Репутация: 346 Сообщения: 13122 Откуда: Ставрополь Зарегистрирован: 16.08.2007
 |
|
Как с клавиатуры передать значение параметру?
_________________ Все астероиды не пересчитать! |
|
|
бухой джедай
183 EGP
  Рейтинг канала: 5(141) Репутация: 70 Сообщения: 7906 Предупреждений: 1 Откуда: Одесса:) Зарегистрирован: 08.09.2007
 |
|
задаеш переменную и в параметр ставиш эту переменную
_________________ Так Добрый вечер...Превед с большого Бодуна...
Магистр Непросыхаемость...
Злобный Рецедивист... |
|
|
|
|
|
Канал X3: Reunion ->
Модовый и скриптовый отсек X3: Reunion: «Скриптописание - делимся опытом, задаем вопросы» |
|