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

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

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 3
На страницу: 1, 2, 3  След. | Все страницы
Поиск в этой теме:
Канал X3: Terran Conflict » X3: Farnham's Legacy: «Вопросы и помощь в написании скриптов и модов»
gav622007
 73 EGP


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.2007
Карта Скорпа в X3 Farnham's Legacy не показывает апгрейды на доках.
Команда get tradeable ware array from station похоже теперь на добавляет апгрейды в массив, только товары.
Попробовал поправить скрипт ace.service.assembly.inf.stat
 Cкрытый текст   (кликните здесь для просмотра)
Код:
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, пришлось исключать проверкой. решено, код обновил.

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

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

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

Последний раз редактировалось: alexalsp (19:28 08-04-2023), всего редактировалось 1 раз
Последний раз редактировалось: gav622007 (15:37 06-06-2021), всего редактировалось 4 раз(а)
    Добавлено: 00:55 06-06-2021   
DNA78
 420 EGP


Рейтинг канала: 8(824)
Репутация: 70
Сообщения: 1186
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
gav622007 :
p.s. только не понял почему в таблицах один ключ всегда null

А для чего лишние телодвижения с get next key и перебором всей таблицы делал, вот так разве не проще Подмигиваю и не будет никаких нулей.
Код:
$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

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


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.2007
я до такого не додумался, это типа из таблицы массив получаем?
была такая мысль, но не понял как сделать.
спасибо попробую Улыбка
    Добавлено: 08:48 06-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(208)
Репутация: 6
Сообщения: 165

Зарегистрирован: 19.02.2020
gav622007 :


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

Код:
$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
    Добавлено: 09:04 06-06-2021   
DNA78
 420 EGP


Рейтинг канала: 8(824)
Репутация: 70
Сообщения: 1186
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
gav622007 :
это типа из таблицы массив получаем?

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


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.2007
DNA78, longreed, спасибо за помощь, выбрал вариант longreed (короче) Улыбка .
Код в своём посте обновил, может кому пригодится.
DNA78 :
Нет, здесь получаем массив ключей данной таблицы, коими являются товары.

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

Последний раз редактировалось: gav622007 (15:18 06-06-2021), всего редактировалось 1 раз
    Добавлено: 15:09 06-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(208)
Репутация: 6
Сообщения: 165

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


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

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

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


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.2007
я думаю в данном случае это не критично, выбрал вариант попроще Улыбка
главное, что карта теперь всё показывает

Последний раз редактировалось: gav622007 (15:36 06-06-2021), всего редактировалось 1 раз
    Добавлено: 15:35 06-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.2007
Как скриптом узнать куда направляется корабль (в какой сектор)? Перебрал все команды, не получается. Ещё и раскидали по разделам, запаришься искать, со старым SE мне было проще. Подмигиваю
    Добавлено: 15:44 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(208)
Репутация: 6
Сообщения: 165

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


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

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

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

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


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


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.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
вот я и застрял, может тут вообще варианта нет?

Последний раз редактировалось: gav622007 (18:22 08-06-2021), всего редактировалось 1 раз
    Добавлено: 18:20 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(208)
Репутация: 6
Сообщения: 165

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


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.2007
это уже подсказка, надо поковырять этот скрипт, может добавить туда лок. переменную с сектором, и из неё получать? Улыбка
спасибо за помощь
    Добавлено: 20:17 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(208)
Репутация: 6
Сообщения: 165

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


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

Последний раз редактировалось: longreed (20:23 08-06-2021), всего редактировалось 1 раз
    Добавлено: 20:21 08-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.2007
вот оттуда и надо попробовать выдернуть без вмешательства Подмигиваю
    Добавлено: 20:25 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(208)
Репутация: 6
Сообщения: 165

Зарегистрирован: 19.02.2020
gav622007 :
вот оттуда и надо попробовать выдернуть без вмешательства Подмигиваю


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

Последний раз редактировалось: longreed (20:35 08-06-2021), всего редактировалось 1 раз
    Добавлено: 20:33 08-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.2007
да, я смотрю этот скрипт, но локальных переменных там нет, только добавлять
вот есть массив
046 * TL flies to target sector
047 $target.sector = $target.position[3]
но как его получить без этого скрипта?

Последний раз редактировалось: gav622007 (20:55 08-06-2021), всего редактировалось 1 раз
    Добавлено: 20:48 08-06-2021   
longreed
 96 EGP


Рейтинг канала: 5(208)
Репутация: 6
Сообщения: 165

Зарегистрирован: 19.02.2020
gav622007 :
да, я смотрю этот скрипт, но локальных переменных там нет, только добавлять


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

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

Последний раз редактировалось: longreed (21:01 08-06-2021), всего редактировалось 1 раз
    Добавлено: 20:57 08-06-2021   
DNA78
 420 EGP


Рейтинг канала: 8(824)
Репутация: 70
Сообщения: 1186
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Есть у кого нибудь опыт работы с visual studio 2008? А то я тут с кодом X-Studio воюю и ни как не могу победить одну хрень:
Код:
typedef   BOOL                  (*CHANGE_WINDOWS_MESSAGE_FILTER_EX)(HWND, UINT, DWORD, CHANGEFILTERSTRUCT*);

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

Последний раз редактировалось: DNA78 (19:17 19-06-2021), всего редактировалось 3 раз(а)
    Добавлено: 19:12 19-06-2021   
gav622007
 73 EGP


Рейтинг канала: 5(141)
Репутация: 22
Сообщения: 183
Откуда: Советский союз
Зарегистрирован: 22.09.2007
Есть такая команда:
%0get script argument pardef: scriptname=%1, argument=%2
если я правильно понял, возвращает аргумент %2 из скрипта %1, а как получить в переменную %1, скрипт, который выполняется на объекте, если это возможно?
    Добавлено: 09:50 21-06-2021   
Канал X3: Terran Conflict -> X3: Farnham's Legacy: «Вопросы и помощь в написании скриптов и модов»
На страницу: 1, 2, 3  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Да я уж и не знаю, о чем думать... и думать ли... и есть ли у меня, чем думать... и думаю ли я вообще... (растерялся ImperialHunter)

  » Вопросы и помощь в написании скриптов и модов | страница 1
Каналы: Новости | 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