|
|
|
Канал X3: Terran Conflict »
Модовый и скриптовый отсек X3: Terran Conflict: «[ДИСКУС]: Скриптописание. Проблемы и их решение.» |
|
|
DNA78 420 EGP
Рейтинг канала: 9(1060) Репутация: 70 Сообщения: 1192 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
alexalsp
В прилагаемом материале по этому вопросу всё очень подробно рассказано.
X3Scripting.rar |
Описание: |
Учебник по скриптописанию |
|
Имя файла: |
X3Scripting.rar |
Размер файла: |
2.62 MB |
Скачано: |
304 раз(а) |
_________________ Очевидное-невероятное
Последний раз редактировалось: DNA78 (06:50 14-02-2020), всего редактировалось 4 раз(а) |
|
|
alexalsp 513 EGP
Рейтинг канала: 4(60) Репутация: 54 Сообщения: 4240
Зарегистрирован: 12.08.2014 |
|
Бывают случаи когда пример лучше целого мануала
Я там не нашел необходимой инфы, только общая инфа с примерами которые наврядли мне пригодятся.
У меня конкретная задача...
Создать, подключить и перенести как сделано в русском литкубе.
Только там использовались лткубовские тексовики , а я хотел новый.
Что нало было описано в прошом сообщение.
_________________ CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/w56kPWH
Последний раз редактировалось: alexalsp (17:48 14-02-2020), всего редактировалось 1 раз |
|
|
DNA78 420 EGP
Рейтинг канала: 9(1060) Репутация: 70 Сообщения: 1192 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
alexalsp : |
Я там не нашел необходимой инфы, только общая инфа с примерами которые наврядли мне пригодятся.
|
Что? В разделе "Языковые файлы XML в Х2"
об этом всё подробно написано.
alexalsp : |
Объясните кто то , как правильно в Х3 переносить текст со скриптов в текстовик и что бы текст отображался после переноса.
|
В обычных иксах такого не возможно. Такое возможно только в Litcube's Universe либо в Combo Mod.
alexalsp : |
Создал текстовик 10000-L007.xml (может в Х3 число имеет значение в отличие от ребеза и Х4)
|
А это, что за номер такой 10000? Ты где нибудь видел, чтобы так текстовые файлы в Х3 назывались. Используй четырёхзначное число и не будет проблем. Всё астольное как по учебнику:
с начала загружаешь нужный файл - load text: id=1000
а затем читаешь из него - $text = read text: page=1 id=1 или $text = sprintf: pageid=1 textid=1, $Value, $Value, $Value, $Value, $Value
_________________ Очевидное-невероятное |
|
|
alexalsp 513 EGP
Рейтинг канала: 4(60) Репутация: 54 Сообщения: 4240
Зарегистрирован: 12.08.2014 |
|
О теперь понятненько где собака зарыта)))
А я тотдумал имя текстовика не имеет значения.
Хотя в одном из модов видел 5ти значное имя...
Ок попробуем 4х значное.
Спасибо. Теперь есть варианты маневрирования
Приду завтра с работы и буду прбовать.
_________________ CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/w56kPWH
Последний раз редактировалось: alexalsp (19:22 14-02-2020), всего редактировалось 1 раз |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Кто-нибудь знает как можно отключить обучение десантников на аванпостах? Еще вопрос: Как при поиске кораблей во вселенной найти бесхозные корабли? Если в расе указать null, то он корабли всех рас найдет или бесхозные?
_________________ Пираты - наше всё! |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Я опять с дурацкими вопросами. Как сделать расу на которую не будут агриться ксеноны? То есть, чтоб корабли той расы могли спокойно обитать в ксенонских секторах. Использовать постоянно set relation against?
_________________ Пираты - наше всё! |
|
|
Thug 67 EGP
Рейтинг канала: 3(26) Репутация: 4 Сообщения: 111 Откуда: Новороссийск Зарегистрирован: 11.11.2013 |
|
Подскажите друзья, можно ли скриптом изменить название сектора, не правя при этом текстовые документы? Пробовал инструкцию ($Sector ->set name to $Name) - но не меняется. Даже в Х3Реунион был сюжет с покупкой сектора, и предлагалось на выбор несколько названий, и это уж точно скриптом делалось. А в ТС скрипт-редактор более расширен, но я не нашёл код...
_________________ На фоне космоса - человечество, всего лишь пыль! |
|
|
DNA78 420 EGP
Рейтинг канала: 9(1060) Репутация: 70 Сообщения: 1192 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
za4ot : |
Кто-нибудь знает как можно отключить обучение десантников на аванпостах?
|
Отключается в x3story.obj.
za4ot : |
Как при поиске кораблей во вселенной найти бесхозные корабли?
|
$ships = get ship array: of race [Neutral Race] class/type=[Ship]
za4ot : |
Как сделать расу на которую не будут агриться ксеноны?
|
Это делается в x3story.obj или постоянно set relation against.
Thug : |
Подскажите друзья, можно ли скриптом изменить название сектора, не правя при этом текстовые документы?
|
Можно с помощью MD команды <set_sector_override sector="sector" textid="textid" x="x" y="y"/>.
_________________ Очевидное-невероятное |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Нет уж, спасибо. Один раз в обж залез и больше желания нет. Буду обходится скриптами.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (17:38 11-02-2021), всего редактировалось 1 раз |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Как посчитать в игре синус и косинус? Функции в вычислениях выдают какой-то бред при подстановке чисел от 1 до 360. Скормил им дробное значение угла в радианах, чем намертво подвесил игру.
_________________ Пираты - наше всё! |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
za4ot : |
Как посчитать в игре синус и косинус?
|
Нашел ответ на вопрос - Никак. Решение тоже нашел, работаю над воплощением.
_________________ Пираты - наше всё! |
|
|
Thug 67 EGP
Рейтинг канала: 3(26) Репутация: 4 Сообщения: 111 Откуда: Новороссийск Зарегистрирован: 11.11.2013 |
|
Назначил кораблю команду, в меню приказов "Специальные" и что бы ReadText2010-510 обрёл имя, команду теперь надо прописать в текстовике - это понятно. Но можно ли дать название команде, используя только скрипт-редактор?
Ну типа, как то так:
001 $Name=read text: page id=2010, id=510 exists
002 if$Name == 'ReadText2010-510'
003 |$Name ->set name to 'Pemont'
004 end
_________________ На фоне космоса - человечество, всего лишь пыль!
Последний раз редактировалось: Thug (14:34 16-02-2021), всего редактировалось 1 раз |
|
|
DNA78 420 EGP
Рейтинг канала: 9(1060) Репутация: 70 Сообщения: 1192 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
Thug : |
Но можно ли дать название команде, используя только скрипт-редактор?
|
Нет.
_________________ Очевидное-невероятное |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Thug : |
команду теперь надо прописать в текстовике - это понятно. Но можно ли дать название команде, используя только скрипт-редактор?
|
А зачем? Текстовик пишется 5 минут покуривая и попивая чай.
_________________ Пираты - наше всё! |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
za4ot : |
Как посчитать в игре синус и косинус?
|
Написал библиотеку, которая создает два глобальных массива с именами "sinus" и "cosinus". Массивы содержат значения синусов и косинусов от 0 до 360 градусов с шагом в 1 градус умноженные на 10 в 9-й степени (ибо игра целочисленная и дробных значений она не ест). Номер элемента массива соответствует градусу. sin30 это sinus[30]. Для нахождения координаты точки на окружности по формуле x=r*sin(a) сначала нужно R=1.000.000.000/r, а уже затем sinus[а]/R. В другом порядке, когда я сначала r умножал на sinus[а], а затем делил на 1.000.000.000 у меня не срабатывало и уж точно не сработает если сразу sinus[а] делить на 1.000.000.000 (ибо дробные значения игра не ест).
Срип достаточно 1 раз запустить из скрипт-редактора и потом обращаться к массивам через ref = get global variable name: 'sinus' или ref = get global variable name: 'cosinus' из любого скрипта.
bradis.zip |
Описание: |
Библиотека синусов/косинусов. |
|
Имя файла: |
bradis.zip |
Размер файла: |
3.44 KB |
Скачано: |
163 раз(а) |
_________________ Пираты - наше всё! |
|
|
DNA78 420 EGP
Рейтинг канала: 9(1060) Репутация: 70 Сообщения: 1192 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
za4ot : |
Срип достаточно 1 раз запустить из скрипт-редактора и потом обращаться к массивам через ref = get global variable name: 'sinus' или ref = get global variable name: 'cosinus' из любого скрипта.
|
А зачем память засираешь переменными с массивами? Памяти в Х3ТС не так уж и много
Сделай возврат массива из 'sinus' и 'cosinus'.
Если не секрет, то как и для чего это можно использовать?
_________________ Очевидное-невероятное |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
DNA78 : |
А зачем память засираешь переменными с массивами?
|
Из глобального массива можно в любое время просто считать переменную. Если же вызывать библиотеку, то каждый раз нужно будет это считать, а это время, которое отнято у других скриптов. Я wait-ы стараюсь ставить везде где только можно, и если скорость выполнения скрипта не критична, то паузы бывают в секундах, а иногда даже и в минутах. Ну и кому нужно, тот за пару минут перепишет скрипт под свои нужды - там всего строк несколько дописать/изменить.
DNA78 : |
Памяти в Х3ТС не так уж и много
|
Сколько памяти? На сколько глобальных массивов ее хватит? Думаю памяти не меньше 3,2 Гб (игра ж 32-бита), хотя могу и ошибаться. Хотелось бы узнать подробнее. А то мне для будущих скриптов еще с 10-к глобальных массивов по 500 элементов может понадобиться.
DNA78 : |
Если не секрет, то как и для чего это можно использовать?
|
Используется в задаче нахождения координаты точки на окружности при известных центре и радиусе. Подобный скрипт был использован в скрипте Ring of Fire. Но меня он не устроил (раскладка должна быть английская, а я играю на русской, башни стелс, которые мне не нужны, слишком много башен по умолчанию 360 - ни один корабль в трюм столько не возьмет, а как их подвозить непонятно, странные радиусы без учета дальности орудия, нет возможности собрать установленные башни обратно в трюм), поэтому я не стал копаться в чужом скрипте (слишком долго бы я разбирался в чужом коде и не факт, что разобрался бы) и написал свою версию Ring of Fire. Из оригинала взял только 90 строк с уже введенными табличными значениями синусов и косинусов, чтоб время сэкономить. Всё остальное написал с чистого листа.
Может еще к решению каких задач сгодятся, навскидку так не скажу.
Кстати, еще одна мысль посетила меня. Сейчас у меня 120 ЛБ разворачиваются практически моментально, что не очень реалистично, вот и думаю вставить паузу в 1 секунду, тогда процесс займет 2 минуты, что не очень долго для комфортного игрового процесса, а остальным скриптам будет время выполнится.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (18:20 17-02-2021), всего редактировалось 4 раз(а) |
|
|
DNA78 420 EGP
Рейтинг канала: 9(1060) Репутация: 70 Сообщения: 1192 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
za4ot : |
Из глобального массива можно в любое время просто считать переменную.
|
Можно в любой момент вызвать этот скрипт.
Этот скрипт отрабатывает в считаные миллисекунды не внося при этом каких либо существенных задержек, его система и не почувствует. Вообще дело конечно хозяйское.
za4ot : |
На сколько глобальных массивов ее хватит?
|
На много.
za4ot : |
Думаю памяти не меньше 3,2 Гб
|
Ошибаешься, всего 2,5 Гб. При старте будет порядка 1,1-1,5 Гб, сюда и будут входить твои глобальные массивы, затем по мере посещения новых секторов память будет расти и как только она достигнет 2,5-2,7 Гб будет небольшой подвисон при котором произойдёт выгрузка памяти до начальных 1,1-1,5 Гб.
Не вижу смысла держать данные в памяти которыми не так уж часто и пользуешься. Не забываем также, что и сейвы в следствии этого также будут раздуваться.
Лично я стараюсь придерживаться правила - отработал и забыл. Ни каких массивных данных в памяти при этом не оставляя, а стараюсь все эти данные записывать в текстовики, либо в самих скриптах. А то в друг с процессом save\load что-то пойдёт не так или в момент выгрузки памяти.
_________________ Очевидное-невероятное |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
DNA78 : |
данные записывать в текстовики
|
Да ты чертов гений. Можно же записать таблицы в текстовик, а потом просто считывать нужное значение по текст ай-ди.
<page id="ХХХХ" title=" " descr=" ">
<t id="1">999847694</t>
<t id="2">999390826</t>
<t id="259">999847694</t>
<t id="360">1000000000</t>
</page>
Тогда косинус 2 градусов
$cos=read text: page=ХХХХ id=2
$cos=convert strig $cos to integer
Так можно будет записывать просто огромное количество данных (хотя загруженная в память текстовая страница тоже ест оперативку или нет?). Единственно, что такой способ не применим к изменяемым глобальным массивам, а вот для статических данных очень даже подойдет. На выходных попробую приделать к своему скрипту такую вот текстовую библиотеку.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (21:34 17-02-2021), всего редактировалось 2 раз(а) |
|
|
za4ot 476 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3251 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
DNA78 : |
Если не секрет, то как и для чего это можно использовать?
|
Вот нашел еще такой фрагмент кола из скрипта "Миномет сквош" для рениона. Вроде как определяет точку перед носом вражеского корабля куда кидать мину.
Код: |
001 $size = $ship -> get size of object
002 $a = $ship -> get rot alpha
003 $b = $ship -> get rot beta
004 $g = $ship -> get rot gamma
005 $g = $g - 16384
006 $e = $a + 16384
007
008 $fix = = fixed sin $a
009 $sin.a = $fix * 100 / 65535
010 $fix = = fixed cos $a
011 $cos.a = $fix * 100 / 65535
012 $fix = = fixed sin $b
013 $sin.b = $fix * 100 / 65535
014 $fix = = fixed cos $b
015 $cos.b = $fix * 100 / 65535
016 $fix = = fixed sin $g
017 $sin.g = $fix * 100 / 65535
018 $fix = = fixed cos $g
019 $cos.g = $fix * 100 / 65535
020 $fix = = fixed sin $e
021 $sin.e = $fix * 100 / 65535
022 $fix = = fixed cos $e
023 $cos.e = $fix * 100 / 65535
024
025 $x = $ship -> get x position
026 $y = $ship -> get y position
027 $z = $ship -> get z position
028
029 $x = $x + ( $size + 5 ) * $cos.b * $sin.a / 10000 + 20 * $cos.g * $sin.e / 10000
030 $y = $y + ( $size + 5 ) * $sin.b / 100 * -1 + 20 * $sin.g / 100
031 $z = $z + ( $size + 5 ) * $cos.b * $cos.a / 10000 * -1 + 20 * $cos.g * $cos.e / 10000 * -1
032
033 $array = array alloc: size=3
034 $array[0] = $x
035 $array[1] = $y
036 $array[2] = $z
037
038 return $array
|
Пока еще не понял как автор посчитал синус и косинус с использованием стандартных функций. Может моя библиотека не нужна вовсе, а просто нужно понять как он это сделал и проверить в игре.
_________________ Пираты - наше всё! |
|
|
|
|
|
Канал X3: Terran Conflict ->
Модовый и скриптовый отсек X3: Terran Conflict: «[ДИСКУС]: Скриптописание. Проблемы и их решение.» |
|