|
|
|
Канал X3: Terran Conflict »
Модовый и скриптовый отсек X3: Terran Conflict: «[ДИСКУС]: Скриптописание. Проблемы и их решение.» |
|
|
DNA78 423 EGP
Рейтинг канала: 9(1060) Репутация: 71 Сообщения: 1229 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
za4ot : |
Это я ставил, когда ты его только сделал. У меня от него жуткие тормоза были потому и снес.
|
Сейчас вернулся в ту эпоху и посмотрел, что я там наделал. И да, действительно есть косяки в обже Это была моя первая проба пера с добавлением новых команд в обж. В общем удалил я его.
_________________ Очевидное-невероятное |
|
|
za4ot 481 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3281 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
DNA78 : |
В общем удалил я его.
|
Ото всюду не удалишь. У меня в закромах лежит, да и не только у меня одного, наверное.
Пересобрал сборку, начал играть, смотрю что-то не то. В общем, один скрипт не работает ибо его !ship.signal.killed.xml не работает, а работает оригинальный запакованный !ship.signal.killed.pck. И что самое интересное я на эти грабли наступаю каждый раз, когда начинаю играть после очередного обновления сборки. А почему? Да потому, что бытует мнение, что распакованные скрипты имеют приоритет над запакованными. А вот фиг вам! Посему никого не слушайте, меня слушайте, всегда удаляйте копии оригинальных скриптов из папки scripts. Хорошо спохватился часов через 20 - теперь для чистоты эксперимента нужно заново начинать, эх а я уже заводик космобухла начал строить.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (21:49 24-02-2021), всего редактировалось 3 раз(а) |
|
|
za4ot 481 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3281 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Был тут где-то скрипт, который позволял установить уровень агрессивности Хааков (читай сколько кластеров будет генерится в каждом секторе и как часто). Скрипт был оформлен как ал-плагин, созавал глобальную переменную, и для полного удаления к нему еще был приложен скрипт анинсталла.
Подумалось мне, что это слишком жирно для установки значения одной скриптовой команде. Поэтому и потому что скрипт все-таки годный и добавляет немного разнообразия в мою спокойную игру, переписал я его. Вот результат:
001 $random=random value from 0 to 18 - 1
002 $aggression=15 + $random * 5
(002 $aggression=15) меняем строку, запускаем из редактора, сохраняемся, удаляем скрипт из папки - вот и весь анинсталл.
003 set Kha'ak aggression level to $aggression
004 @ =wait 120000 ms
005 $message='Текущий уровень активности Хааков равен: ' + $aggression + '. Оповещение службы безопасности полетов.'
006 play sample 1124
007 display subtitle text: text=$message duration=10000 ms
008 return null
У меня получилось 8 строк, из которых 4 при необходимости можно просто удалить. А еще у меня есть элемент рандомности - случайное значение при каждой загрузке или reinit script cashe. Вот и думаю, а нафиг автор того скрипта так заморочился?
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (23:31 24-02-2021), всего редактировалось 6 раз(а) |
|
|
Thug 67 EGP
Рейтинг канала: 3(26) Репутация: 4 Сообщения: 111 Откуда: Новороссийск Зарегистрирован: 11.11.2013 |
|
Парни, подскажите как создать массив всего, что находится на корабле? Включая установленное оружие и др.
Нашёл только:
* Массив товаров на корабле, не являющийся установленным оборудованием.
$Wares=$Ship -> get tradeable ware array from ship
В итоге, мне нужно у непися выбросить всё в космос, в контейнерах, может не искать массив, а есть другая инструкция?
_________________ На фоне космоса - человечество, всего лишь пыль!
Последний раз редактировалось: Thug (12:40 28-02-2021), всего редактировалось 2 раз(а) |
|
|
za4ot 481 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3281 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Получаешь массив с товарами.
$WareArray get tradeable ware array from ship
Получаешь массив с количеством товара.
$size = size of array $WareArray
NumWareArray = array alloc: size $size
while $size != 0
dec $size
$Ware = $WareArray[$size]
$NumWare = $Ship get amount of ware $Ware in cargo bay
insert $NumWare into array NumWareArray at index $size
end
А чтоб найти установленное оборудование с помощью этой команды проверяем наличие оборудования. Если 1 то есть, если 0, то нет.
<RetVar/IF> <object> get amount of ware <ware> in cargo bay
Создаешь массив со всем оборудованием. В цикле этой командой проверяешь, и если оборудование есть, то в другой массив его записываешь и получаешь на выходе массив с установленным оборудованием.
С турелями не работал, но в скрипт-редакторе посмотри раздел "информация об оружии" там должны быть команды, чтоб узнать сколько и чего стоит в турелях.
Попробуй так.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (12:51 28-02-2021), всего редактировалось 1 раз |
|
|
Thug 67 EGP
Рейтинг канала: 3(26) Репутация: 4 Сообщения: 111 Откуда: Новороссийск Зарегистрирован: 11.11.2013 |
|
za4ot : |
А чтоб найти установленное оборудование с помощью этой команды проверяем наличие оборудования.
|
С обычным грузом всё понятно, а вот создать массив с установленными щитами и оружием - проблема. Но направление понятно... Думал ещё искать по классу - оружие, щиты.
_________________ На фоне космоса - человечество, всего лишь пыль! |
|
|
za4ot 481 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3281 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Для оружия нужно опросить турели и узнать какие в них пушки стоят. Для этого нужно использовать команды из раздела "информация об оружии" в скрипт-редакторе.
Для щитов подумать нужно.
_________________ Пираты - наше всё! |
|
|
DNA78 423 EGP
Рейтинг канала: 9(1060) Репутация: 71 Сообщения: 1229 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
Thug : |
С обычным грузом всё понятно, а вот создать массив с установленными щитами и оружием - проблема.
|
Ну какие проблемы, ну что вы
Код: |
$WeaponAndShield = array alloc: size=0
$Num = $Ship -> get number of shield bays
while $Num >= 0
$Ware = $Ship -> get shield type in bay $Num
do if is datatype[$Ware] == [DATATYP_WARE]
append $Ware to array $WeaponAndShield
dec $Num
end
$Num = $Ship -> get number of laser bays
while $Num >= 0
$Ware = $Ship -> get laser type in bay $Num
do if is datatype[$Ware] == [DATATYP_WARE]
append $Ware to array $WeaponAndShield
dec $Num
end |
_________________ Очевидное-невероятное |
|
|
Thug 67 EGP
Рейтинг канала: 3(26) Репутация: 4 Сообщения: 111 Откуда: Новороссийск Зарегистрирован: 11.11.2013 |
|
Всё правильно, но требуется удалить всё оружие и щиты с корабля, а так мы найдём лишь те, что в слотах - те что в трюме будут скриптом проигнорированны.
Вообщем искал так же по типу и подтипу, и нашёл такой путь:
$Revers=4
while$Revers > 0
if$Revers == 4
$ware=Сингулярный уплотнитель времени
else if$Revers == 3
$ware=Ракета "Москит"
else if$Revers == 2
$ware=Автоматическая пушка
else if$Revers == 1
$ware=1 МДж щит
end
$MainType=get maintype of ware $ware
$ArraySubType=get number of subtypes of maintype $MainType
while$ArraySubType
dec $ArraySubType=
$ware=get ware from maintype $MainType and subtype $ArraySubType
$count=$ship -> get amount of ware $ware in cargo bay
if$count > 0
...А далее выбрасываем с корабля и создаём в космосе, в контейнерах.
...Обычный товар удаляем инструкцией описанной выше: $WareArray get tradeable ware array from ship.
Чистит трюм полностью, спасибо всем
_________________ На фоне космоса - человечество, всего лишь пыль!
Последний раз редактировалось: Thug (17:02 04-03-2021), всего редактировалось 1 раз |
|
|
za4ot 481 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3281 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Thug : |
Код: |
$Revers=4
while$Revers > 0
if$Revers == 4
$ware=Сингулярный уплотнитель времени
else if$Revers == 3
$ware=Ракета "Москит"
else if$Revers == 2
$ware=Автоматическая пушка
else if$Revers == 1
$ware=1 МДж щит
end |
|
Тут $Revers всегда равен 4, соответственно $ware всегда Сингулярный уплотнитель времени.
Thug : |
Чистит трюм полностью, спасибо всем
|
Рад, что у тебя что-то получается. Главное не останавливаться.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (17:34 04-03-2021), всего редактировалось 2 раз(а) |
|
|
DNA78 423 EGP
Рейтинг канала: 9(1060) Репутация: 71 Сообщения: 1229 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
Thug : |
Всё правильно, но требуется удалить всё оружие и щиты с корабля, а так мы найдём лишь те, что в слотах - те что в трюме будут скриптом проигнорированны.
|
Каков вопрос, таков и ответ. Или я не прав. Такое впечатление из вашего умозаключения, что я что-то не правильное посоветовал.
добавлено спустя 2 минуты:
za4ot : |
Тут $Revers всегда равен 4, соответственно $ware всегда Сингулярный уплотнитель времени.
|
Здесь скорее всего будет вечный зависон
_________________ Очевидное-невероятное
Последний раз редактировалось: DNA78 (19:36 04-03-2021), всего редактировалось 1 раз |
|
|
by.@ztek 315 EGP
Рейтинг канала: 5(218) Репутация: 50 Сообщения: 795 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010 |
|
DNA78 : |
Здесь скорее всего будет вечный зависон
|
Ага.
добавлено спустя 2 минуты:
С while аккуратнее, dec в помощь.
добавлено спустя 2 минуты:
И зачем в цикле проверять? просто
If $Revers == то-то, тогда так.
_________________ Совершенству нет предела...
Последний раз редактировалось: by.@ztek (20:57 05-03-2021), всего редактировалось 2 раз(а) |
|
|
Thug 67 EGP
Рейтинг канала: 3(26) Репутация: 4 Сообщения: 111 Откуда: Новороссийск Зарегистрирован: 11.11.2013 |
|
Столько комментариев, не ожидал. Разумеется есть инструкция (dec $Revers=) Я выложил только обсуждаемую часть скрипта, от сюда и непонятки... Прошу прощения! Вот полная версия моего проверенного и рабочего скрипта (если кому интересно). Думаю - теперь разом отвечу на все обсуждения
Cкрытый текст (кликните здесь для просмотра)
* Скрипт выбрасывает либо [ВЕСЬ ГРУЗ ИЗ ТРЮМА] либо [ЛЮБОЙ УКАЗАННЫЙ ВАМИ ТОВАР].
* 1. Укажите корабль в секторе ->> Далее - null, и весь груз будет выброшен автоматически.
* = ИЛИ! =
* 1. Просканируйте товары в трюме корабля, и укажите нужный в общем спике товаров игры.
* 2. Если товар будет указан правильно, он весь будет выброшен из корабля, в контейнере.
$x=$ship -> get x position
$y=$ship -> get y position
$z=$ship -> get z position
$z=$z + 1000
$sector=$ship -> get sector
$PlSector=[PLAYERSHIP] -> get sector
* Если целевой корабль в удалённом секторе - СТОП!
if$sector != $PlSector
=speak text: page=13 id=135 priority=0
=speak text: page=13 id=133 priority=0
=speak text: page=13 id=36 priority=0
return null
end
* Если при вводе скрипта указан - Tовар -
if$ware != null
$count=$ship -> get amount of ware $ware in cargo bay
if$count > 0
play sample 991
@ =wait 200 ms
$Text=sprintf: fmt='Koличecтвo: %s ед. | Tовар: %s. | Выброшен из корабля: %s.', $count, $ware, $ship, null, null
send incoming message $Text to player: display it=[TRUE]
goto label WareEnter
else
@ =wait 200 ms
$Text='Этот товар отсутсвует в трюме корабля.'
send incoming message $Text to player: display it=[TRUE]
return null
end
end
* Если при вводе скрипта указан - null -
* ======
* Mассив для поиска на корабле товаров.
$Amount=$ship -> get tradeable ware array from ship
$wares=size of array $Amount
while$wares > 0
dec $wares=
$ware=$Amount[$wares]
$count=$ship -> get amount of ware $ware in cargo bay
$MainType=get maintype of ware $ware
$SubType=get subtype of ware $ware
$count=$count * -1
=$ship -> install $count units of $ware
$count=$count * -1
$ware=create flying ware: maintype=$MainType subtype=$SubType count=$count sector=$sector x=$x y=$y z=$z selfdestruct=null
@ =wait 10 ms
end
$Revers=4
while$Revers > 0
play sample 991
* Аргумент для поиска на корабле улучшений.
if$Revers == 4
$ware=Сингулярный уплотнитель времени
* Аргумент для поиска на корабле ракет.
else if$Revers == 3
$ware=Ракета "Москит"
* Аргумент для поиска на корабле лазеров.
else if$Revers == 2
$ware=Автоматическая пушка
* Аргумент для поиска на корабле щитов.
else if$Revers == 1
$ware=1 МДж щит
end
* 1. Команда возвращает тип товара.
$MainType=get maintype of ware $ware
* 2. Команда возвращает количество подтипов для типа.
$ArraySubType=get number of subtypes of maintype $MainType
while$ArraySubType
dec $ArraySubType=
* 3. Команда возвращает товар, заданный значениями типа и подтипа.
$ware=get ware from maintype $MainType and subtype $ArraySubType
* 4. Проверяем наличие такого товара в трюме и выбрасываем в космос.
$count=$ship -> get amount of ware $ware in cargo bay
if$count > 0
WareEnter:
* ======
$MainType=get maintype of ware $ware
$SubType=get subtype of ware $ware
$count=$count * -1
=$ship -> install $count units of $ware
$count=$count * -1
$ware=create flying ware: maintype=$MainType subtype=$SubType count=$count sector=$sector x=$x y=$y z=$z selfdestruct=null
end
end
(ТОТ САМЫЙ ЗЛОЩАСТНЫЙ )
dec $Revers=
@ =wait 10 ms
end
@ =wait 200 ms
$Text='Выгрузка товара закончена.'
send incoming message $Text to player: display it=[TRUE]
return null
|
_________________ На фоне космоса - человечество, всего лишь пыль!
Последний раз редактировалось: Thug (21:25 06-03-2021), всего редактировалось 5 раз(а) |
|
|
Thug 67 EGP
Рейтинг канала: 3(26) Репутация: 4 Сообщения: 111 Откуда: Новороссийск Зарегистрирован: 11.11.2013 |
|
Друзья, возможно ли скриптом сделать корабль невидимым для радара? Как например невидим Аран, при поиске его в неизвестном секторе несфокусированным прыжком.
Пробовал команду: set known status to, но это не то.
_________________ На фоне космоса - человечество, всего лишь пыль! |
|
|
za4ot 481 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3281 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Thug : |
возможно ли скриптом сделать корабль невидимым для радара?
|
Нет. Но это не точно.
_________________ Пираты - наше всё! |
|
|
by.@ztek 315 EGP
Рейтинг канала: 5(218) Репутация: 50 Сообщения: 795 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010 |
|
Thug : |
возможно ли скриптом сделать корабль невидимым для радара?
|
Как бы да ))). В МД это точно есть.
Вот пример
Cкрытый текст (кликните здесь для просмотра)
Код: |
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">
<documentation>
<author name="by.@ztek" alias="Des-Studio" contact="http://des-studio.su"/>
<content name="test hidden ship" description=""/>
<version number="1" date="12-03-2021" status="testing"/>
</documentation>
<cues>
<cue name="TOTT_test_HS">
<timing>
<time exact="10s"/>
</timing>
<action>
<do_all>
<create_ship name="this.Hidd_ship" class="tl" hidden="1" race="{player.sector.race}">
<position object="{player.ship}" min="30km"/>
<sector sector="{player.sector}"/>
<equipment loadout="maximum">
</equipment>
<command command="idle">
</command>
</create_ship>
<incoming_message text="name- {object.name@this.Hidd_ship}, sector- {object.sector.name@this.Hidd_ship}, pos X- {object.position.x.km@this.Hidd_ship}km, pos Y- {object.position.y.km@this.Hidd_ship}km, pos Z- {object.position.z.km@this.Hidd_ship}km"/>
</do_all>
</action>
<cues>
<cue name="TOTT_test_HS 111">
<condition>
<check_all>
<cue_is_complete cue="parent"/>
</check_all>
</condition>
<timing>
<time exact="10s"/>
</timing>
<action>
<do_all>
<set_hidden object="parent.Hidd_ship" hidden="0"/>
<incoming_message text="now not hidden )))"/>
</do_all>
</action>
</cue>
</cues>
</cue>
</cues>
</director> |
|
Тут вот что: в первом (верхнем) эпизоде и создается корабль скрытый, hidden="1", он гад и в радар не попадает, просто визуально находим. А вот во втором эпизоде просто, без условий (ну это пока, на любителя), снимаем ему эту фишку.
(set_hidden object="parent.Hidd_ship" hidden="0")
добавлено спустя 13 минут:
может улучшенные спутники их могут засечь? Не проверял.
добавлено спустя 13 минут:
п.п.с. код второго эпизода, например, с дистанции 10 км, тому кораблю стать видимым
Cкрытый текст (кликните здесь для просмотра)
Код: |
<condition>
<check_all>
<cue_is_complete cue="parent"/>
<object_position object="{player.ship}" max="10km">
<position object="parent.Hidd_ship"/>
</object_position>
</check_all> |
|
_________________ Совершенству нет предела...
Последний раз редактировалось: by.@ztek (21:29 12-03-2021), всего редактировалось 3 раз(а) |
|
|
za4ot 481 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3281 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Только что столкнулся с проблемой при написании скрипта. Не работает команда
insert <Value> into array <Var/Array> at index <Var/Number>
Вернее работает, но не так как описано в справочнике.
Есть массив с двумя координатами точек индексы 0 и 1. Находим середину отрезка с помощью подпрограммы и используем команду вставить найденное значение в индекс 1, получаем массив с тремя точками: индексы 0, 1, 2. Снова вызываем подпрограмму и находим середину отрезка 0-1, используем команду вставить найденное значение в индекс 1 и снова получаем массив с тремя точками: индексы 0, 1, 2 - где новое значение 1 затирает старое значение 1, хотя мы должны были получить массив с четырьмя точками: индексы 0, 1, 2, 3. Почему команда в первый раз срабатывает как нужно, а во второй раз затирает значение, а не увеличивает размер массива?
Координаты точек в подпрограмму передаются правильно, значение возвращаемое из подпрограммы правильное, а вставлять не хочет - на втором витке цикла затирает.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (00:12 15-03-2021), всего редактировалось 1 раз |
|
|
za4ot 481 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3281 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Разобрался. Теперь я точно знаю разницу между переменной с указателем на массив и переменной с копией массива. Чуть голову всю не сломал пока додумался.
_________________ Пираты - наше всё! |
|
|
alexalsp 514 EGP
Рейтинг канала: 4(77) Репутация: 54 Сообщения: 4356
Зарегистрирован: 12.08.2014 |
|
Это радует, но обычно люди делятся , что бы другие тоже поняли и порадовались вместе с тобой
_________________ CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/w56kPWH |
|
|
DNA78 423 EGP
Рейтинг канала: 9(1060) Репутация: 71 Сообщения: 1229 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
za4ot : |
Разобрался. Теперь я точно знаю разницу между переменной с указателем на массив и переменной с копией массива.
|
А как это связано с insert <Value> into array <Var/Array> at index <Var/Number>.
_________________ Очевидное-невероятное |
|
|
|
|
|
Канал X3: Terran Conflict ->
Модовый и скриптовый отсек X3: Terran Conflict: «[ДИСКУС]: Скриптописание. Проблемы и их решение.» |
|