|
|
|
Канал X3: Reunion »
Модовый и скриптовый отсек X3: Reunion: «Скриптописание - делимся опытом, задаем вопросы» |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) : 25 Posts: 375
Joined: 20 May 2003
 |
|
Господа, каким образом можно уничтожить звезду в секторе с помощью скриптовых команд? Ато <RefObj> destruct: show no explosion=<Var/Number> вызывает вылет игрушки с ошибкой.(ссылка на солнце есть)
добавлено спустя 1 минуту:
з.Ы.: Я так понял, что в х3 повыковыривали все типы светил, оставив только первый. Почему? + при попытке поставить отличный от 1 subtype, игра вылетает.
_________________ То пропадаю, то снова появляюсь
Last edited by CTPELOK on 16:17 22-02-2008; edited 1 time in total |
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) : 248 Posts: 4751 Location: Киев Joined: 08 Jan 2007
 |
|
G-Nome wrote: |
Как вот такой скрипт поставить на горячую клавишу:
$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 wrote: |
4.Откуда у тебя берутся значения в $position? Я так понял - это параметры скрипта ?
|
это скрипт plugin.banshee.gatelessjump из набора читов.В меню он прекрасно работает, но хочется на гор. клавишу, чтоб в менюшках не ковырятся. Кстати приставка plugin значение имеет?
Попробовал, не вышло.Теперь вообще ничего не говорит и ничего не происходит. Если использовать movetoposition корабель просто набирает скорость и не сбрасывает ее Если сможешь написать для меня такой скрипт, буду очень благодарен!
|
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) : 248 Posts: 4751 Location: Киев Joined: 08 Jan 2007
 |
|
G-Nome wrote: |
Если сможешь написать для меня такой скрипт, буду очень благодарен! Улыбка
|
Разобраться помогу, да и народ, я думаю подключится, а писать - нет, извини.
_________________ Умножим энтропию на 0 :-) |
|
|
G-Nome
|
|
Chem wrote: |
Разобраться помогу, да и народ, я думаю подключится, а писать - нет, извини.
|
Все равно спасибо. Я ставил другие скипты аналогичного свойства (Advaced Jumpdrive 1.5), ситуация та же. Может это от версии игры зависить? Стоит 1.2+кумулятивный патч до 2.5 и русик с сайта.
добавлено спустя 3 минуты:
Romz wrote: |
А что он делает?
|
Делает прыжок по координатам. из меню пашет, а при попытке поставить на гор. клавишу борт-тетка говорит "нас приветствуют" и все
|
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) : 25 Posts: 375
Joined: 20 May 2003
 |
|
Возможно ли с помощью скриптов влиять на производственый цикл станции? Останавливать, запускать, ускорять, замедлять? Я что-то не нашел ничего похожего в хелпе.
_________________ То пропадаю, то снова появляюсь |
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) : 248 Posts: 4751 Location: Киев Joined: 08 Jan 2007
 |
|
CTPELOK wrote: |
Останавливать, запускать
|
Да. Наводящее слово "trade and production tasks". Это типа квест - ищи .
CTPELOK wrote: |
ускорять, замедлять
|
нет, только меня состав ресурсов и продукции.
_________________ Умножим энтропию на 0 :-) |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) : 25 Posts: 375
Joined: 20 May 2003
 |
|
Вопрос еще. Каким образом можно реализовать автозапуск скрипта при создании станции? Допустим, игрок построил станцию, сразу после ее появления на ней должен заработать скрипт. Есть ли способ отличный от периодического поиска станций игрока и проверки, запущен ли скрипт (кстати, как можно проверить, запущен ли скрипт на станции?) и по надобности запускать?
_________________ То пропадаю, то снова появляюсь |
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) : 248 Posts: 4751 Location: Киев Joined: 08 Jan 2007
 |
|
CTPELOK wrote: |
Каким образом можно реализовать автозапуск скрипта при создании станции? Допустим, игрок построил станцию, сразу после ее появления на ней должен заработать скрипт. Есть ли способ отличный от периодического поиска станций игрока и проверки, запущен ли скрипт
|
Нет.
CTPELOK wrote: |
кстати, как можно проверить, запущен ли скрипт на станции?) и по надобности запускать
|
<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 Posts: 375
Joined: 20 May 2003
 |
|
Жалко. Надо будет как-то намекнуть егософтовцам, чтобы в скриптах более удачно реализовали обработчики событий.
спасиб за совет.
Chem wrote: |
попробуй посмотреть бомбардира
|
В своих-то исходниках не всегда разобраться могу, а в чужих )))))))
_________________ То пропадаю, то снова появляюсь |
|
|
Chem
780 EGP
          Рейтинг канала: 15(2610) : 248 Posts: 4751 Location: Киев Joined: 08 Jan 2007
 |
|
CTPELOK wrote: |
В своих-то исходниках не всегда разобраться могу, а в чужих )))))))
|
Было так:
Code: |
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 Posts: 375
Joined: 20 May 2003
 |
|
С помощью скрипта хотел перечислить все фабрики игрока. Но в сообщении появляется только строчка "some" и кнопка "ок"... Больше ничего. Что в коде не так, подскажите пожалуйста?
Code: |
$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]
|
_________________ То пропадаю, то снова появляюсь
Last edited by CTPELOK on 11:45 09-03-2008; edited 1 time in total |
|
|
sergej4341
460 EGP
  Рейтинг канала: 5(139) : 148 Posts: 1593 Location: Химки/Брест Joined: 16 Jan 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 Posts: 4751 Location: Киев Joined: 08 Jan 2007
 |
|
Или проще и правильнее:
Code: |
$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 :-)
Last edited by Chem on 19:44 09-03-2008; edited 2 times in total |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) : 25 Posts: 375
Joined: 20 May 2003
 |
|
sergej4341 wrote: |
StationArray = array alloc: size= 10 ///не нужна
|
Это было написано, чтобы явно задать массив (думал, что из-за этого глюки)
sergej4341 wrote: |
$k = $k + 1 ///красивей и правильней inc $k =
|
Написано тоже для профилактики глюков
sergej4341 wrote: |
/// необходима строка $k = 1 без нее $k = null и цикл не делает ни одного прохода
|
Нифига себе, не мог даже и подумать.
Кстати, я не пойму как в скриптах реализованы типы переменных? Они как бы и есть, но их как бы и нет. В любом случае, спасибо за подсказку.
_________________ То пропадаю, то снова появляюсь |
|
|
sergej4341
460 EGP
  Рейтинг канала: 5(139) : 148 Posts: 1593 Location: Химки/Брест Joined: 16 Jan 2004
 |
|
CTPELOK wrote: |
Нифига себе, не мог даже и подумать.
|
встроенный дебаггер в руки и вперед
CTPELOK wrote: |
Кстати, я не пойму как в скриптах реализованы типы переменных? Они как бы и есть, но их как бы и нет.
|
а поточнее? что именно не понятно?
действительно, они как бы есть и их как бы нет, но если при передаче скрипту аргументов (при его запуске из работающего скрипта) ошибиться с типами, то работать не будет
_________________ нажал клав. и затаил дыхание |
|
|
CTPELOK
145 EGP
  Рейтинг канала: 5(113) : 25 Posts: 375
Joined: 20 May 2003
 |
|
sergej4341 wrote: |
встроенный дебаггер в руки и вперед
|
Дебаггер вроде же как работает только для скриптов, запущенных на объектах. Глобальные скрипты дебагать у меня не получилось.
sergej4341 wrote: |
а поточнее? что именно не понятно?
|
Ну принцип действия типов переменных. Например, чтобы сделать переменную строковой, нужно "инициализировать" ее просто запихнув туда текст. Но, например, если в переменную "$message" тупо запихнуть указатель на станцию, то он отображаться в сообщении не будет. Т.е. send incoming message $message to player: display it= [TRUE] не отобазит ничего, если перед этим в $message запхать просто указатель на станцию. А если $message = "some text" + $SomeStationPtr , то все будет нормально. Это же лишние действия.
Еще один вопрос: как прибить скрипт, запущенный на станции вручную? Не нашел нигде такой опции.
_________________ То пропадаю, то снова появляюсь
Last edited by CTPELOK on 00:27 10-03-2008; edited 1 time in total |
|
|
sergej4341
460 EGP
  Рейтинг канала: 5(139) : 148 Posts: 1593 Location: Химки/Брест Joined: 16 Jan 2004
 |
|
CTPELOK wrote: |
Дебаггер вроде же как работает только для скриптов, запущенных на объектах.
|
так и есть, а что мешает запустить твой скрипт для отладки на объекте а после доведения до ума как глобальный?
а когда понадобится отлаживать скрипты работающие на неписях, то же ничего не получится пока не сделаешь объекту-неписю расу Player
CTPELOK wrote: |
как прибить скрипт, запущенный на станции вручную? Не нашел нигде такой опции.
|
а ее и нет
пишешь свой скрипт-убийцу
= 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) Если это сделать, скрипт повиснет.
_________________ нажал клав. и затаил дыхание |
|
|
Арманкессилон
1756 EGP
             Рейтинг канала: 9(1184) : 346 Posts: 13154 Location: Ставрополь Joined: 16 Aug 2007
 |
|
Как с клавиатуры передать значение параметру?
_________________ Все астероиды не пересчитать! |
|
|
бухой джедай
183 EGP
  Рейтинг канала: 5(141) : 70 Posts: 7906 Предупреждений: 1 Location: Одесса:) Joined: 08 Sep 2007
 |
|
задаеш переменную и в параметр ставиш эту переменную
_________________ Так Добрый вечер...Превед с большого Бодуна...
Магистр Непросыхаемость...
Злобный Рецедивист... |
|
|
|
|
|
Канал X3: Reunion ->
Модовый и скриптовый отсек X3: Reunion: «Скриптописание - делимся опытом, задаем вопросы» |
|