|
|
|
Канал X3: Terran Conflict »
X3: Farnham's Legacy: «[ДИСКУС] Вопросы и помощь в написании скриптов и модов» |
|
|
longreed
96 EGP
 Рейтинг канала: 5(211) Репутация: 6 Сообщения: 165
Зарегистрирован: 19.02.2020
 |
|
Долго думал, создавать ли тему и будет ли она актуально, что бы перенести в нее сообщения из темы «Обновлённый скриптовый движок и всё, что с ним связано».
Даже сейчас не уверен, но создам, так как все же это разные, на мой взгляд темы.
В общем в теме , как по названию видно, пишем все что связано с написанием скриптов и модов, своего рода справка помагалка от продвинут скриптеров новичкам и не только, в этом не легком деле...
Редактирование: alexalsp
===============================================================================
По-моему ни как не получить имя скрипта. Это скорее связано с тем, что скрипт в своем теле может вызывать кучу других скриптов. А для объекта это один процесс с приоритетом. Если я ошибаюсь, думаю меня поправят.
Последний раз редактировалось: alexalsp (02:11 20-02-2023), всего редактировалось 3 раз(а) |
|
|
DNA78
429 EGP
     Рейтинг канала: 9(1053) Репутация: 73 Сообщения: 1268 Откуда: Кыргызстан Зарегистрирован: 12.11.2008
 |
|
Если только так:
Код: |
$TasksArray = $Ship -> get all running task ids
$Size = size of array $TasksArray
while $Size
dec $Size
$Task = $TasksArray[$Size]
$Command = $Ship -> get command: task= $Task
$ScriptName = $Ship -> get command script: command= $Command
end |
_________________ Очевидное-невероятное |
|
|
gav622007
73 EGP
 Рейтинг канала: 5(142) Репутация: 22 Сообщения: 186 Откуда: Советский союз Зарегистрирован: 22.09.2007
 |
|
да, имя скрипта так получается, спасибо, но видимо это просто имя, сам аргумент из него не получить, только тип и описание.
|
|
|
Добрый
52 EGP
 Репутация: 2 Сообщения: 11
Зарегистрирован: 09.12.2013
 |
|
DNA78 : |
Есть у кого нибудь опыт работы с visual studio 2008?
|
Я пересобирал первый XStudio в Visual Studio 2010 Express.
Release target собрать по итогу не удалось, только Debug.
По итогу лично для себя набросал транслятор скриптов в текстовые файлы. Правда, там по итогу структура кода немного отличается от того, что нам показывают все редакторы, включая встроенный.
С выходом FL подумываю написать компилятор-декомпилятор на каком-нибудь питоне во что-то кастомное, и подсветку для редактора, для меня это пока более простое решение для скриптописательства. Особенно если учесть, что сразу можно будет использовать массу текстовых утилит в консоли
|
|
|
DNA78
429 EGP
     Рейтинг канала: 9(1053) Репутация: 73 Сообщения: 1268 Откуда: Кыргызстан Зарегистрирован: 12.11.2008
 |
|
Добрый : |
Я пересобирал первый XStudio в Visual Studio 2010 Express.
|
Я всё сделал в 2019, собрал всё кроме BearScriptUI. Да и в принципе всё работает со старым BearScriptUI, но с некоторыми ухищрениями )) Юзаю по полной.
_________________ Очевидное-невероятное |
|
|
by.@ztek
316 EGP
    Рейтинг канала: 4(60) Репутация: 52 Сообщения: 799 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010
 |
|
Не знаю,куда, сюдой буду.
Плююсь, извините. Что за на фиг с секторами?
Вопрос к скриптерам сейчас.
Пишу
Код: |
<!--<do_any>
<find_sector name="this.SectorTemple" x="0" y="15"/>
<find_sector name="this.SectorTemple" x="0" y="16"/>
</do_any>--> |
В какие-то "Глубины молчания" меня отправляет, если у=16. Икс то ноль. Я в карте не понимаю ничего теперь. Если у=15 - просто пишет сектор 00-15., хотя он открыт. Что за дела? Знает кто? Это скриптописание и вопросы к нему.
Просто темы нет.
добавлено спустя 13 минут:
Cкрытый текст (кликните здесь для просмотра)
|
Ноль же по X.
добавлено спустя 3 минуты:
Ждать же не буду. Напишу сейчас сектор 0.0. Посмотрим.
добавлено спустя 4 минуты:
А, может считать теперь без пропусков (в смысле если по х пусто..или по у ) ?
добавлено спустя 6 минут:
Да "Глубины молчания" не там же... Какого мне выдает что рандом из Двух даже позиций Эту глубину....
Смотрю 00
добавлено спустя 14 минут:
Не.
Cкрытый текст (кликните здесь для просмотра)
|
Отсюда счет начинается.
добавлено спустя 17 минут:
by.@ztek : |
Плююсь, извините. Что за на фиг с секторами?
|
Я один. Скорее всего. Разберусь - отпишусь.
добавлено спустя 11 минут:
Выяснил. что вижу- то и счет берем.
_________________ Совершенству нет предела...
Последний раз редактировалось: by.@ztek (11:28 06-08-2022), всего редактировалось 9 раз(а) |
|
|
alexalsp
521 EGP
      Рейтинг канала: 8(846) Репутация: 56 Сообщения: 4559
Зарегистрирован: 12.08.2014
 |
|
Пока перенес сюда. долго сам думал к чему его прикрутить , но если сами придумаете правильную тему, создайте ее, я сообщение перенесу или сами скопируйте, а это удалите.
_________________ CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/w56kPWH
Пользуйте мои моды как хотите.... |
|
|
DNA78
429 EGP
     Рейтинг канала: 9(1053) Репутация: 73 Сообщения: 1268 Откуда: Кыргызстан Зарегистрирован: 12.11.2008
 |
|
by.@ztek : |
В общем - что вижу, считаю.
|
Нужно считать то, что видишь во внутри игровом редакторе галактики. Там тебе будут показаны номера секторов.
by.@ztek : |
Отсюда счет начинается.
|
Не пойму зачем ты смотришь и считаешь по карте? На ней сектора можно хоть как расположить и за это расположение отвечает objects\cut\00749.bod
_________________ Очевидное-невероятное |
|
|
slepers
50 EGP Репутация: 0 Сообщения: 3
Зарегистрирован: 24.12.2022
 |
|
gav622007 : |
Карта Скорпа в X3 Farnham's Legacy не показывает апгрейды на доках.
Команда get tradeable ware array from station похоже теперь на добавляет апгрейды в массив, только товары.
Попробовал поправить скрипт ace.service.assembly.inf.stat
вроде работает
|
Не работает. Ошибка. Не объявлена таблица. Поправлено, готовый код прилагается.
Cкрытый текст (кликните здесь для просмотра)
Код: |
$new.string=read text: page=3577 id=40009
$msg=$msg + '-----' + $class.stations + $new.string
$array.station=find station: sector=$sector class or type=$class.stations race=null flags=[Find.Multiple] refobj=null maxdist=null maxnum=999999 refpos=null
$n=size of array $array.station
skip if$n
return $msg
while$n
dec $n=
$station=$array.station[$n]
$class.station=$station -> get object class
if$class.station == Торговый док
if$class.stations != Торговый док
goto label end.n
end
end
$x=$station -> get x position
$y=$station -> get y position
$z=$station -> get z position
$msg=$msg + $station + '; ' + $x + '; ' + $y + '; ' + $z + $new.string
$race.station=$station -> get owner race
$msg=$msg + $race.station + $new.string
$array.ware=table alloc
$array.ware=$station ->get products table: include equipment=[TRUE]
$ware=get next key: table=$array.ware key=[NULL]
while$ware
$price.ware=$station -> get price of ware $ware
$amount.ware=$station -> get amount of ware $ware in cargo bay
$free.amount.ware=$station -> get free amount of ware $ware in cargo bay
$maintype.ware=get maintype of ware $ware
$string='+' + $ware + '; ' + $price.ware + '; ' + $amount.ware + '; ' + $free.amount.ware + '; ' + $maintype.ware
$msg=$msg + $string + $new.string
$ware=get next key: table=$array.ware key=$ware
end
end.n:
end
return $msg
|
|
Апгрейды отображаются, но с порядком беда. Перфекционист в душе дюже не доволен.
Я хз можно ли тут скидывать готовый правленый файл, ну типо авторские права и тд, но я бы скинул, если можно. Дабы другие юзеры, не особо искушенные в скриптописании, не страдали подобно мне. Только подскажите в какой раздел правильней скинуть.
Готовый файл
Последний раз редактировалось: slepers (02:30 25-12-2022), всего редактировалось 4 раз(а) |
|
|
alexalsp
521 EGP
      Рейтинг канала: 8(846) Репутация: 56 Сообщения: 4559
Зарегистрирован: 12.08.2014
 |
|
Скидывай, программа свободная.
_________________ CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/w56kPWH
Пользуйте мои моды как хотите.... |
|
|
DNA78
429 EGP
     Рейтинг канала: 9(1053) Репутация: 73 Сообщения: 1268 Откуда: Кыргызстан Зарегистрирован: 12.11.2008
 |
|
slepers : |
Не работает. Ошибка. Не объявлена таблица. Поправлено, готовый код прилагается.
|
$array.ware=table alloc, а эта строка для чего?
Сама по себе команда $array.ware=$station ->get products table: include equipment=[TRUE] уже возвращает таблицу в переменную и ни какое объявление таблиц для этого не нужно
Вот так код прекрасно работает. (кликните здесь для просмотра)
Код: |
$TMain=get global variable: name='Combo.Main'
$msg=$msg + '-----' + $class.stations + $new.string
$array.station=find station: sector=$sector class or type=$class.stations race=null flags=[Find.Multiple] refobj=null maxdist=null maxnum=999999 refpos=null
$n=size of array $array.station
skip if$n
return $msg
while$n
dec $n=
$station=$array.station[$n]
$class.station=$station -> get object class
if$class.station == Торговый док
if$class.stations != Торговый док
goto label end.n
end
end
$x=$station -> get x position
$y=$station -> get y position
$z=$station -> get z position
$msg=$msg + $station + '; ' + $x + '; ' + $y + '; ' + $z + $new.string
$race.station=$station -> get owner race
$msg=$msg + $race.station + $new.string
$array.ware=$station -> get tradeable ware array from station
$m=size of array $array.ware
while$m
dec $m=
$ware=$array.ware[$m]
$price.ware=$station -> get price of ware $ware
$amount.ware=$station -> get amount of ware $ware in cargo bay
$free.amount.ware=$station -> get free amount of ware $ware in cargo bay
$maintype.ware=get maintype of ware $ware
$string='+' + $ware + '; ' + $price.ware + '; ' + $amount.ware + '; ' + $free.amount.ware + '; ' + $maintype.ware
$msg=$msg + $string + $new.string
end
end.n:
end
return $msg |
|
Ах да, апгрейдов не видно...
_________________ Очевидное-невероятное
Последний раз редактировалось: DNA78 (16:51 26-12-2022), всего редактировалось 1 раз |
|
|
slepers
50 EGP Репутация: 0 Сообщения: 3
Зарегистрирован: 24.12.2022
 |
|
DNA78 : |
$array.ware=table alloc, а эта строка для чего?
Сама по себе команда $array.ware=$station ->get products table: include equipment=[TRUE] уже возвращает таблицу в переменную и ни какое объявление таблиц для этого не нужно
|
Ну во-первых, я же сказал, что не особо искушен в скриптах, так по мелочи что-то могу поправить под себя или добавить, объединить скрипты.
Во-вторых, я просто хотел поиграть. Как в TC и AP установить, накинуть несколько скриптов, и просто пройти сюжетки. В итоге я уже неделю копаюсь в коде и раскуриваю тему. В данном случае я вот как ни бился, пока ее не объявил апгрейды не появились.
Также были муки с текстовиками. Я воткнул мод на редактируемую цветную карту с поиском, обалденная штука должен сказать, моё почтение, но также хотел, чтоб текстовик красил все остальное, кроме карты, но он ломал цвета в карте скорпа. В итоге выяснил, что если не трогать страницу 1266 с основными расами, то карта скорпа нормально подхватывает цвета. Она правда не понимает цвета корпораций, но это ладно, хрен уж с ним, я просто хочу поиграть с кайфом.
Осталось обж поправить, думаю сегодня закончу подготовку к игровому процессу)
DNA78 : |
Ах да, апгрейдов не видно...
|
А вот этого вот я не понял, с чем именно не видно, с моим кодом?
DNA78 : |
Вот так код прекрасно работает.
|
А он порядок сохраняет или также все перемешивает?
|
|
|
romanazh
55 EGP Рейтинг канала: 2(18) Репутация: 0 Сообщения: 54
Зарегистрирован: 21.02.2021
 |
|
У меня с Combo модом оба варианта не исправляют показ апгрейдов.
DNA78 - вы проверили на ванильной или с Combo модом?
|
|
|
DNA78
429 EGP
     Рейтинг канала: 9(1053) Репутация: 73 Сообщения: 1268 Откуда: Кыргызстан Зарегистрирован: 12.11.2008
 |
|
В комбо тоже не показывает.
_________________ Очевидное-невероятное |
|
|
gav622007
73 EGP
 Рейтинг канала: 5(142) Репутация: 22 Сообщения: 186 Откуда: Советский союз Зарегистрирован: 22.09.2007
 |
|
В cutscenes везде используется
Код: |
<environments>
<environment_implicit name="mainsector" sector="@playersector"/>
</environments> |
соответственно
Код: |
<shot name="shot1" environment="mainsector"...> |
В "EnvironmentList" есть команда "find_sector" с атрибутами "name", "x", "y".
Пишу к примеру:
Код: |
<environments>
<find_sector name="newsector" x="20" y="10"/>
</environments> |
соответственно
Код: |
<shot name="shot1" environment="newsector"...> |
Не работает. Можно ли вообще сделать катсцену не в секторе игрока?
Последний раз редактировалось: gav622007 (20:17 02-04-2023), всего редактировалось 1 раз |
|
|
DNA78
429 EGP
     Рейтинг канала: 9(1053) Репутация: 73 Сообщения: 1268 Откуда: Кыргызстан Зарегистрирован: 12.11.2008
 |
|
Сцены, катсцены, модели - всё это работает только в секторе с игроком.
_________________ Очевидное-невероятное |
|
|
gav622007
73 EGP
 Рейтинг канала: 5(142) Репутация: 22 Сообщения: 186 Откуда: Советский союз Зарегистрирован: 22.09.2007
 |
|
Понял, спасибо, знач бум прыгать перед катсценой и сразу назад после ролика
|
|
|
CuriousMax
56 EGP Рейтинг канала: 3(42) Репутация: 3 Сообщения: 62
Зарегистрирован: 22.09.2021
 |
|
В папке scripts находится файл !setup.x3fl.pck. Хочу добавить несколько новых команд add god factory removal exclusion: race= . Они будут выполняться? И как? Например, только новая игра. Или же как новая игра так и старые сохранения. Или внесение изменений в этот файл не будет иметь никакого эффекта.
|
|
|
alexalsp
521 EGP
      Рейтинг канала: 8(846) Репутация: 56 Сообщения: 4559
Зарегистрирован: 12.08.2014
 |
|
«Скрипты - это легко...»
https://www.elite-games.ru/conference/viewtopic.php?p=738640#738640
Cкрытый текст (кликните здесь для просмотра)
Цитата: |
Имя скрипта (Script)
Первое что мы видим это имя скрипта. В Х2 имя скрипта имеет большое значение, т.к. в имени скрипта содержится много важной информации обрабатываемой ScE. В нашем примере имя начинается со знака «!» это сообщает редактору о том, что данный скрипт является системным и не подлежит редактированию. Скрипты со знаком «!» не будут отражаться в списке доступных для редактирования скриптов. В Х2 присутствуют следующие типы имен: “init.* ”, ”setup.* ”, “al.plugin.* ”, “galaxy.* “. Каждое из имен имеет определенное значение, и скрипты с такими именами выполняются игрой автоматически.
o Init Scripts: скрипты с именами “init.* ” и “!init.* “ являются скриптами инициализации, тоесть они загружаются автоматически каждый раз когда вы запускаете игру или загружаете сейв. Но обратите внимание на то, что загрузка скриптов init происходит до инициализации галактики (то есть до создания кораблей и станций). Поэтому нужно быть осторожным используя данный тип имен для скриптов работающих с объектами в галактике.
o Setup Scripts: скрипты с именами “setup.* ” и “!setup.* “ запускаются автоматически при создании новой игры или загрузке сейва. Загрузка скриптов setup происходит после инициализации галактики (то есть все объекты уже созданы). Использование setup для скриптов активно работающих с объектами в галактике, позволяет избежать многих ошибок которые могут возникнуть при использовании init.
o AL Plugin Scripts: скрипты с именами “al.plugin.* ” и “!al.plugin.* “ отвечают за искусственную жизнь в галактике (патрули секторов, транспорты летающие между станциями (в том числе и станции игрока) любой скрипт данного типа отвечает за какой нибудь конкретный процесс происходящий в галактике связанный с искусственной жизнью.
o Galaxy Ship Init Scripts: скрипты с именами “galaxy.* “ используются для запуска иных чем встроенная в Х2 карта. Этот скрипт создает стартовый корабль игрока. ScE при запуске проверяет наличие скрипта с именем “galaxy.<имя карты> “ или “!galaxy.<имя карты> “
Обратите внимание на одну особенность при использовании имен скриптов init, setup, !init, !setup. Скрипты !init и !setup запускаются всегда при старте или загрузке сэйва. Если использовать скрипты такого типа, НЕ подписанные Егософтом (цифровая подпись скрипта, см. ниже), то игра автоматом приобретает статус Modified. Скрипты типа init и setup запускаются ТОЛЬКО в игре со статусом Modified, в немодифицированной игре они не будут запускаться, несмотря на то, что находятся в папке \scripts.
|
|
X3 Modding:
https://www.elite-games.ru/conference/viewtopic.php?t=47001
_________________ CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/w56kPWH
Пользуйте мои моды как хотите....
Последний раз редактировалось: alexalsp (12:37 06-04-2023), всего редактировалось 3 раз(а) |
|
|
DNA78
429 EGP
     Рейтинг канала: 9(1053) Репутация: 73 Сообщения: 1268 Откуда: Кыргызстан Зарегистрирован: 12.11.2008
 |
|
CuriousMax : |
Они будут выполняться? И как? Например, только новая игра. Или же как новая игра так и старые сохранения.
|
Да, будут выполняться (в зависимости от контекста её встраивания в этот скрипт), но тут главное знать что делает та или иная команда. Возымеет ли эффект от add god factory removal exclusion: race= в уже начатой игре вопрос который нужно адресовать автору. Данная команда скорее всего будет работать в долгосрочной перспективе.
_________________ Очевидное-невероятное |
|
|
|
|
|
Канал X3: Terran Conflict ->
X3: Farnham's Legacy: «[ДИСКУС] Вопросы и помощь в написании скриптов и модов» |
|