Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » [ДИСКУС] Вопросы и помощь в написании скриптов и модов |
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Search | Conference rules | Album | Register | Pilots list | Profile | Log in to check your private messages | Log in

   Page 1 of 3
Go to page: 1, 2, 3  Next | All pages
Поиск в этой теме:
Канал X3: Terran Conflict » X3: Farnham's Legacy: «[ДИСКУС] Вопросы и помощь в написании скриптов и модов»
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
Карта Скорпа в X3 Farnham's Legacy не показывает апгрейды на доках.
Команда get tradeable ware array from station похоже теперь на добавляет апгрейды в массив, только товары.
Попробовал поправить скрипт ace.service.assembly.inf.stat
 Cкрытый текст   (кликните здесь для просмотра)
Code:
025   |$msg=$msg + $race.station + $new.string
026   * --------------------------------------------------------------------------------
027   *$array.ware=$station -> get tradeable ware array from station
028   *$m=size of array $array.ware
029   * --------------------------------------------------------------------------------
030   * ================================================================================
031   |$array.ware=$station ->get products table: include equipment=[TRUE]
032   |$ware=get next key: table=$array.ware key=[NULL]
033   |while$ware
034   * ================================================================================
035   * --------------------------------------------------------------------------------
036   *while$m
037   *dec $m=
038   *$ware=$array.ware[$m]
039   * --------------------------------------------------------------------------------
040   ||$price.ware=$station -> get price of ware $ware
041   ||$amount.ware=$station -> get amount of ware $ware in cargo bay
042   ||$free.amount.ware=$station -> get free amount of ware $ware in cargo bay
043   ||$maintype.ware=get maintype of ware $ware
044   ||$string='+' + $ware + '; ' + $price.ware + '; ' + $amount.ware + '; ' + $free.amount.ware + '; ' + $maintype.ware
045   ||$msg=$msg + $string + $new.string
046   * ================================================================================
047   ||$ware=get next key: table=$array.ware key=$ware
048   * ================================================================================
049   |end

между * ====== добавленные команды
между * ------ закомментированы старые
вроде работает Улыбка
p.s. только не понял почему в таблицах один ключ всегда null, пришлось исключать проверкой. решено, код обновил.

======================================================

Библиотека необходимых утилит - для мододелов

======================================================

Last edited by alexalsp on 09:57 22-05-2024; edited 2 times in total
Last edited by gav622007 on 15:37 06-06-2021; edited 4 times in total
    Posted: 00:55 06-06-2021   
DNA78
 432 EGP


Рейтинг канала: 9(1068)
: 73
Posts: 1272
Location: Кыргызстан
Joined: 12 Nov 2008
gav622007 wrote:
p.s. только не понял почему в таблицах один ключ всегда null

А для чего лишние телодвижения с get next key и перебором всей таблицы делал, вот так разве не проще Подмигиваю и не будет никаких нулей.
Code:
$table.ware=$station ->get products table: include equipment=[TRUE]
$keys = get keys: table= $table.ware
$size = size of array $keys
while $size
   dec $size
   $ware = $keys [$size]
end

_________________
Очевидное-невероятное
    Posted: 07:03 06-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
я до такого не додумался, это типа из таблицы массив получаем?
была такая мысль, но не понял как сделать.
спасибо попробую Улыбка
    Posted: 08:48 06-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(211)
: 6
Posts: 166

Joined: 19 Feb 2020
gav622007 wrote:


У вас происходит обращение к несуществующему элементу <ключ><значение>, которое вы потом обрабатываете, а его не надо, так как цикл while должен завершаться. Если используете такую конструкцию нужно:

Code:
$array.ware=$station ->get products table: include equipment=[TRUE]

*-- Получить первый элемент в таблице --
$ware=get next key: table=$array.ware key=[NULL]

while $ware
*-- Обработать элемент ---
*   ........ тут вы создаете свой $msg .....
* -------------------------------
* -- Перейти к следующему, если он не существует, то цикл завершится ---
$ware=get next key: table=$array.ware key=$ware
end
    Posted: 09:04 06-06-2021   
DNA78
 432 EGP


Рейтинг канала: 9(1068)
: 73
Posts: 1272
Location: Кыргызстан
Joined: 12 Nov 2008
gav622007 wrote:
это типа из таблицы массив получаем?

Нет, здесь получаем массив ключей данной таблицы, коими являются товары.
_________________
Очевидное-невероятное
    Posted: 09:12 06-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
DNA78, longreed, спасибо за помощь, выбрал вариант longreed (короче) Улыбка .
Код в своём посте обновил, может кому пригодится.
DNA78 wrote:
Нет, здесь получаем массив ключей данной таблицы, коими являются товары.

я это и имел ввиду, может неправильно выразился Подмигиваю

Last edited by gav622007 on 15:18 06-06-2021; edited 1 time in total
    Posted: 15:09 06-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(211)
: 6
Posts: 166

Joined: 19 Feb 2020
gav622007 wrote:
DNA78, longreed, спасибо за помощь, выбрал вариант longreed (короче) Улыбка .
Код в своём посте обновил, может кому пригодится.


Тут оба варианта корректны и оба будете использовать, в зависимости от ситуации:

Мой вариант предполагает типичное использование DATATYPE_TABLE. Но этот тип данных имеет ряд серьезных ограничений. Одно из которых, невозможность менять порядок элементов.

По этой причине, если вам нужен измененный порядок элементов, вам необходимо преобразовать DATATYPE_TABLE в DATATYPE_ARRAY, и уже работать с ним как с массивом, что как раз ярко демонстрирует пример DNA78, в котором используется обратный порядок ключей.
    Posted: 15:24 06-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
я думаю в данном случае это не критично, выбрал вариант попроще Улыбка
главное, что карта теперь всё показывает

Last edited by gav622007 on 15:36 06-06-2021; edited 1 time in total
    Posted: 15:35 06-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
Как скриптом узнать куда направляется корабль (в какой сектор)? Перебрал все команды, не получается. Ещё и раскидали по разделам, запаришься искать, со старым SE мне было проще. Подмигиваю
    Posted: 15:44 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(211)
: 6
Posts: 166

Joined: 19 Feb 2020
gav622007 wrote:
Как скриптом узнать куда направляется корабль (в какой сектор)? Перебрал все команды, не получается. Ещё и раскидали по разделам, запаришься искать, со старым SE мне было проще. Подмигиваю


Это не простой вопрос, по крайней мере для меня. Ни когда этого не делал, но по всей видимости можно через команду $Ship -> get command. Вернет текущую команду которую выполняет корабль в таком виде, например:
COMMAND_DOCKAT
И в зависимости от выполняемой команды, нужно запрашивать цель target или target2

Если корабль стыкуется со станцией(COMMAND_DOCKAT) то сектор можно получить:
Code:
$ShipTarget = $Ship -> get command target
$Sector = $ShipTarget -> get sector

Но если корабль летит что то закупать(COMMAND_GET_WARE), то тут уже нужно через target2, так как target содержит товар:
Code:
$ShipTarget = $Ship -> get command target2
$Sector = $ShipTarget -> get sector

При этом корабль может лететь в сектор(COMMAND_MOVE_SECTOR), тогда target будет содержать, непосредственно сектор:
Code:
$Sector = $Ship -> get command target


Как видите, этот способ(если вообще его так можно назвать) далеко не универсален и не удобен, если точно неизвестно какую команду будет выполнять целевой корабль. Возможно кто то предложит вам более нормальный способ Улыбка
    Posted: 17:22 08-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
Спасибо за ответ, эти варианты я пробовал
$Ship -> get command показывает COMMAND_STATION_REBUILD
$ShipTarget = $Ship -> get command target
$Sector = $ShipTarget -> get sector
и
$ShipTarget = $Ship -> get command target2
$Sector = $ShipTarget -> get sector
выдают null
вот я и застрял, может тут вообще варианта нет?

Last edited by gav622007 on 18:22 08-06-2021; edited 1 time in total
    Posted: 18:20 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(211)
: 6
Posts: 166

Joined: 19 Feb 2020
С этой командой все сложнее, она устанавливается в скрипте !god.tl.deliver.factory без параметров, соответственно target и target2 всегда будут возвращать значение null. Проблема заключается в том, что команда set command носит просто информативный характер, и параметры в ней необязательны.
К сожалению, я больше не знаю способа, как вытащить закрытые переменные, в частности сектор назначения из скрипта. Возможно он есть, просто я его не знаю.
    Posted: 19:44 08-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
это уже подсказка, надо поковырять этот скрипт, может добавить туда лок. переменную с сектором, и из неё получать? Улыбка
спасибо за помощь
    Posted: 20:17 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(211)
: 6
Posts: 166

Joined: 19 Feb 2020
gav622007 wrote:
это уже подсказка, надо поковырять этот скрипт, может добавить туда лок. переменную с сектором, и из неё получать? Улыбка
спасибо за помощь


Это самый простой способ и нежелательный Улыбка Я имел ввиду без вмешательства.
В действительности, в скрипт передается массив который состоит из позиции X,Y,Z и сектор назначения.

Last edited by longreed on 20:23 08-06-2021; edited 1 time in total
    Posted: 20:21 08-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
вот оттуда и надо попробовать выдернуть без вмешательства Подмигиваю
    Posted: 20:25 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(211)
: 6
Posts: 166

Joined: 19 Feb 2020
gav622007 wrote:
вот оттуда и надо попробовать выдернуть без вмешательства Подмигиваю


Я не нашел пока, от куда передаются аргументы в скрипт, но это похоже и не нужно. Так как в !god.tl.deliver.factory происходит проверка, годится ли TL для установки станции и после дается команда на ее установку.
Поэтому, после проверки, уже точно зная что TL ее получит, можно и выдернуть сектор назначения.

Last edited by longreed on 20:35 08-06-2021; edited 1 time in total
    Posted: 20:33 08-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
да, я смотрю этот скрипт, но локальных переменных там нет, только добавлять
вот есть массив
046 * TL flies to target sector
047 $target.sector = $target.position[3]
но как его получить без этого скрипта?

Last edited by gav622007 on 20:55 08-06-2021; edited 1 time in total
    Posted: 20:48 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(211)
: 6
Posts: 166

Joined: 19 Feb 2020
gav622007 wrote:
да, я смотрю этот скрипт, но локальных переменных там нет, только добавлять


Там все переменные локальные, они же и закрыты в скрипте. Глобальных нету. Тут только править скрипт, добавляя свой код, поэтому этот способ и нежелательный.

Получить можно по-разному, добавить свою глобальную переменную, либо вызвать свой скрипт, передав ему в качестве аргументов, все нужные переменные. Дело в том, что я не представляю полную картину, для чего вы хотите получить сектор и что потом будите делать с ним, мне трудно сказать как это можно реализовать.

Last edited by longreed on 21:01 08-06-2021; edited 1 time in total
    Posted: 20:57 08-06-2021   
DNA78
 432 EGP


Рейтинг канала: 9(1068)
: 73
Posts: 1272
Location: Кыргызстан
Joined: 12 Nov 2008
Есть у кого нибудь опыт работы с visual studio 2008? А то я тут с кодом X-Studio воюю и ни как не могу победить одну хрень:
Code:
typedef   BOOL                  (*CHANGE_WINDOWS_MESSAGE_FILTER_EX)(HWND, UINT, DWORD, CHANGEFILTERSTRUCT*);

на этой строке выдаёт ошибку - error C2061: синтаксическая ошибка: идентификатор "CHANGEFILTERSTRUCT",
но что самое интересное в visual studio 2019 этой ошибки нет. Как мне это победить в visual studio 2008?
_________________
Очевидное-невероятное

Last edited by DNA78 on 19:17 19-06-2021; edited 3 times in total
    Posted: 19:12 19-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(142)
: 22
Posts: 186
Location: Советский союз
Joined: 22 Sep 2007
Есть такая команда:
%0get script argument pardef: scriptname=%1, argument=%2
если я правильно понял, возвращает аргумент %2 из скрипта %1, а как получить в переменную %1, скрипт, который выполняется на объекте, если это возможно?
    Posted: 09:50 21-06-2021   
Канал X3: Terran Conflict -> X3: Farnham's Legacy: «[ДИСКУС] Вопросы и помощь в написании скриптов и модов»
Go to page: 1, 2, 3  Next | All pages
  
Display posts from previous: 
View previous topic | View next topic |
К списку каналов | Наверх страницы
Цитата не в тему: Никогда не спрашивай, кто такой Дуч и Фалкон и что они делают с УФО! (предупреждает krok)

  » [ДИСКУС] Вопросы и помощь в написании скриптов и модов |
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18