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

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

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

   Страница 3 из 7
На страницу: Пред.  1, 2, 3, 4, 5, 6, 7  След. | Все страницы
Поиск в этой теме:
Канал X4: Foundations: «[SOFT] X4:Полезный софт и модули для разработчиков»
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
Между костром шашлыком и пивом немного "подчесал" метод поиска кораблей и определение сектора нахождения от alexalsp.
Один из кораблей всегда находится "стандартно" в Порочной Логике (так и отображалось в проге).
Мои методы конкретизируют позицию точнее: "Порочная логика VII"...

Последний раз редактировалось: igorVL (12:54 07-06-2026), всего редактировалось 1 раз
    Добавлено: 20:21 06-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
Доброго дня!
Написал поисковик Секторов. И выяснил где они лежат: 08.dat/libraries/mapdefaults.xml.
DatReader легко всасывает этот xml, теперь не нужно прочесывать дат построчно, в поисках "Cluster_00...".

 Cкрытый текст   (кликните здесь для просмотра)


Последний раз редактировалось: igorVL (13:01 07-06-2026), всего редактировалось 1 раз
    Добавлено: 12:58 07-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
Обновление библиотеки CatReaderLib!
Добавлен метод загрузки CatData-объектов по Regex-паттерну.
Например, все корабли теперь можно вытащить из CAT-файла так: "^assets/units/size_.+/macros/ship.+"

Программа X4AbandonedShip: добавлен метод поиска кораблей и сохранение их в локальную базу (пока только для оригинальной игры).

Последний раз редактировалось: igorVL (15:11 07-06-2026), всего редактировалось 1 раз
    Добавлено: 15:10 07-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
igorVL :
(пока только для оригинальной игры)

+ теперь и для DLC!

Программа X4AbandonedShip:
 Cкрытый текст   (кликните здесь для просмотра)
    Добавлено: 17:08 07-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
Программа X4AbandonedShip: (пред-релизная версия v.1.0.0.1)
- много чего исправлено
- удалено лишнее
- переработан интерфейс

 Скрины   (кликните здесь для просмотра)








... завтра еще немного "причешу" и выложу релиз программы в шапку темы для тестирования игроками.
    Добавлено: 01:34 08-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
Вот координаты... Что они дают? В игре то их нет, т.е. будет трудно понять куда примерно лететь (по координатам)..
Может их убрать из поисковика?
И, все корабли, кроме Боронского, находятся фактически в центре секторов (судя по найденным координатам).. На самом деле в игре наверное не так, т.е. правильность этих координат вызывает сомнение..
    Добавлено: 10:15 08-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
X4 Abandoned Ships RC2 в шапке темы! Тестируйте..

 Cкрытый текст   (кликните здесь для просмотра)

В аттаче проект с исходниками для VS (разработчикам).

X4AbandonedShip VS Project.7z
 Описание:
X4_Abandoned_Ships - Проект VS (исходники)
 Имя файла:  X4AbandonedShip VS Project.7z
 Размер файла:  3.49 MB
 Скачано:  30 раз(а)
    Добавлено: 11:39 08-06-2026   
Argo
 190 EGP


Рейтинг канала: 9(1079)
Репутация: 25
Сообщения: 1739
Откуда: Севастополь
Зарегистрирован: 08.01.2005
igorVL :
И, все корабли, кроме Боронского, находятся фактически в центре секторов (судя по найденным координатам).. На самом деле в игре наверное не так, т.е. правильность этих координат вызывает сомнение..


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

Последний раз редактировалось: Argo (12:05 08-06-2026), всего редактировалось 1 раз
    Добавлено: 12:03 08-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
Argo :
Т.е. практической пользы от координат ноль.

Ну вот я тоже так думаю. Ничейные корабли, на сколько помню, всегда где-то у черта на куличиках, а не в центре секторов.
Argo :
Тем не менее, думаю что они должны быть отражены в поисковике, для полноты инфы.

Хм.. Я их убрал (временно), т.к. пока пользы от них никакой. Просто абстрактные цифры.
Еще не вдавался в эти детали: откуда они берутся и как высчитываются (в первичном приложении от alexalsp).

Последний раз редактировалось: igorVL (12:12 08-06-2026), всего редактировалось 1 раз
    Добавлено: 12:11 08-06-2026   
Argo
 190 EGP


Рейтинг канала: 9(1079)
Репутация: 25
Сообщения: 1739
Откуда: Севастополь
Зарегистрирован: 08.01.2005
igorVL :
Еще не вдавался в эти детали: откуда они берутся и как высчитываются


В БД координаты ничейных кораблей указаны по осям x/y/z в километрах. Ноль в центре сектора. Информативно, так и находили на первый раз. В других стартах уже проще, летим по запомнившемуся направлению.
    Добавлено: 12:46 08-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
Argo :
В БД координаты ничейных кораблей указаны по осям x/y/z в километрах.

Ну это то я понимаю.
Не понимаю смысл преобразований в программе alexalsp.

Сейчас внимательно рассмотрел секцию save-файла, где прописан ничейный корабль. У самого корабля нет позиции, но есть позиция у зоны (zone), в которой он находится:
Код:
<position x="-281000" y="-7500" z="254632"/>

Видимо, в БД указано в метрах, т.к. если в км, то далековато выходит ).

добавлено спустя 1 минуту:
Вот позиция зоны другого корабля:
Код:
<position x="-147826" y="-156" z="-185094"/>

На километры чет не похоже..

добавлено спустя 50 минут:
Все, понял.
Код alexalsp не те координаты читает. Он читает "reader.ReadOuterXml()", т.е. весь узел + подузлы. И находит первый попавшийся элемент <position .... А в узле идут оружия, щиты и т.п. Т.е. это координаты всяких обвесов, а не корабля и тем более не зоны.
Вот у первого ничейного корабля находятся координаты генератора щита:
 Cкрытый текст   (кликните здесь для просмотра)
Код:
<component class="shieldgenerator" macro="shield_arg_m_standard_01_mk2_macro" connection="con_shieldgen_01" id="[0xc06c001]">
<offset>
<position x="0.03646" y="8.601" z="-10.467"/>
</offset>
</component>

Улыбка

Нужно читать внешний узел зоны "<component class="zone"" и ее координаты.

добавлено спустя 9 минут:
Исправлю и верну Координаты в поисковик. По ним можно хотя бы приблизительно понять - куда лететь в секторе (от центра).

Последний раз редактировалось: igorVL (13:53 08-06-2026), всего редактировалось 4 раз(а)
    Добавлено: 13:53 08-06-2026   
alexalsp
 542 EGP


Модератор
Рейтинг канала: 14(2392)
Репутация: 56
Сообщения: 4881

Зарегистрирован: 12.08.2014
igorVL :
Еще не вдавался в эти детали: откуда они берутся и как высчитываются (в первичном приложении от alexalsp).

 Cкрытый текст   (кликните здесь для просмотра)
Код:

<component class="ship_m" macro="ship_arg_m_miner_macro" code="ABC-123" owner="ownerless">
    <position x="-45230.4" y="1230.5" z="7890.2"/>
    <ammunition/>
    <pilot class="pilot" macro="pilot_character_macro">
        ...
    </pilot>
    <connection container="1" group="1"/>
</component>

 Cкрытый текст   (кликните здесь для просмотра)
Код:

        private Vector3 GetPositionFromReader(XmlReader reader)
        {
            var position = new Vector3();
            try
            {
                string outerXml = reader.ReadOuterXml();
                var posMatch = Regex.Match(outerXml, @"<position\s+([^/>]+)/>");
                if (posMatch.Success)
                {
                    string attrs = posMatch.Groups[1].Value;
                    var ci = System.Globalization.CultureInfo.InvariantCulture;

                    var xMatch = Regex.Match(attrs, @"x=""([^""]+)""");
                    var yMatch = Regex.Match(attrs, @"y=""([^""]+)""");
                    var zMatch = Regex.Match(attrs, @"z=""([^""]+)""");

                    if (xMatch.Success) float.TryParse(xMatch.Groups[1].Value, System.Globalization.NumberStyles.Float, ci, out position.X);
                    if (yMatch.Success) float.TryParse(yMatch.Groups[1].Value, System.Globalization.NumberStyles.Float, ci, out position.Y);
                    if (zMatch.Success) float.TryParse(zMatch.Groups[1].Value, System.Globalization.NumberStyles.Float, ci, out position.Z);
                }
            }
            catch { }
            return position;
        }


 Cкрытый текст   (кликните здесь для просмотра)
Код:

// Ищем X координату
var xMatch = Regex.Match(attrs, @"x=""([^""]+)""");
if (xMatch.Success)
    float.TryParse(xMatch.Groups[1].Value, NumberStyles.Float, ci, out position.X);

// Ищем Y координату (АНАЛОГИЧНО для Y)
var yMatch = Regex.Match(attrs, @"y=""([^""]+)""");
if (yMatch.Success)
    float.TryParse(yMatch.Groups[1].Value, NumberStyles.Float, ci, out position.Y);

// Ищем Z координату (АНАЛОГИЧНО для Z)
var zMatch = Regex.Match(attrs, @"z=""([^""]+)""");
if (zMatch.Success)
    float.TryParse(zMatch.Groups[1].Value, NumberStyles.Float, ci, out position.Z);


или

 Cкрытый текст   (кликните здесь для просмотра)

Код:
private Vector3 GetPositionFromReader(XmlReader reader)
{
    var position = new Vector3();
    try
    {
        // Сохраняем глубину для возврата (если нужно)
        bool hasPosition = false;
       
        // Рекурсивно читаем дочерние элементы
        if (!reader.IsEmptyElement)
        {
            int depth = reader.Depth;
            reader.Read();
           
            while (reader.Depth > depth)
            {
                if (reader.NodeType == XmlNodeType.Element && reader.Name == "position")
                {
                    // Читаем атрибуты прямо из текущего position элемента
                    position.X = reader.GetAttribute("x") != null
                        ? float.Parse(reader.GetAttribute("x"), CultureInfo.InvariantCulture) : 0;
                    position.Y = reader.GetAttribute("y") != null
                        ? float.Parse(reader.GetAttribute("y"), CultureInfo.InvariantCulture) : 0;
                    position.Z = reader.GetAttribute("z") != null
                        ? float.Parse(reader.GetAttribute("z"), CultureInfo.InvariantCulture) : 0;
                    hasPosition = true;
                }
                reader.Read();
            }
        }
       
        // Если не нашли position, возвращаем нули
        if (!hasPosition)
            position = new Vector3();
    }
    catch (Exception ex)
    {
        Debug.WriteLine($"Ошибка парсинга позиции: {ex.Message}");
    }
   
    return position;
}



X - горизонтальная ось (запад-восток)
Y - вертикальная ось (высота)
Z - глубина (север-юг)

добавлено спустя 5 минут:
Если бы кто то сказал какой метод сортировки файлов при упаковке в кат дат используется в Каталаог Тулз от егосов .... Уже устал подбирать варианты что бы совпало с оригиналом Ой, не могу!.. Вечно расхождения в катах в плане сортировки с оригиналом.

добавлено спустя 4 минуты:
igorVL :


Главный смысл всех преобразований:

Сделать координаты читаемыми для человека:
Убрать дробную часть (не нужна для навигации)
Правильно отобразить отрицательные числа
Показать "не определены" вместо (0, 0, 0)
Сохранить в CSV для других программ

Вот и вся логика преобразований координат! Улыбка

добавлено спустя 2 минуты:
igorVL :
Код alexalsp не те координаты читает.


ну я же писала что черновик налепленный , что бы дать точек Улыбка Я не разбирался со всем севом , нашел кораблик , для времянки кинул координаты для наглядности .... Улыбка
_________________
CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/yZqwPbJaCq
https://t.me/+ApizhYp4JD9kMjU6

Пользуйте мои моды как хотите....

Последний раз редактировалось: alexalsp (21:11 08-06-2026), всего редактировалось 5 раз(а)
    Добавлено: 21:11 08-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
В общем суть чтения должна быть следующая:
Сектор -> Зоны -> Корабли

Корабли находятся в зонах, зоны в секторе(ах).
Т.е. простой последовательный обход ридером на предмет атрибутов по названию класса ("sector", "zone", "ship_x") не канает.
Нельзя будет понять - что к чему относится (родительские и дочерние элементы).

Алгоритм должен быть такой:
1. Читаем ID сектора (макрос, код и т.п.) Запоминаем.
2. Внутри этого сектора обходим Зоны.
3. Зайдя в Зону, запоминаем ее атрибуты (макрос, название, код...)
4. Сразу переходим на узел "<position>" и запоминаем из него атрибуты "x", "y", "z"
5. Далее, внутри зоны ищем узел "<connections>"
6. В нем узлы "<connection>", где атрибут "connection" == "ships"
7. Внутри узла ищем все "<component>" (класс у них будет class="ship_x", где x - s/m/l/xl) по атрибуту "owner"=="ownerless"
8. Если такой корабль нашелся, то создается объект, в который входят:
- данные сектора из п.1
- данные зоны из п.3
- координаты зоны из п.4
- сам корабль (его данные) из п.7

И так по кругу, пока не закончатся сектора.
    Добавлено: 21:15 08-06-2026   
alexalsp
 542 EGP


Модератор
Рейтинг канала: 14(2392)
Репутация: 56
Сообщения: 4881

Зарегистрирован: 12.08.2014
на гигабайтных севах , можно даже поиграть в игру , пока обработает, надо колокольчик на завершение задачи поставить , дзилинь дзилинь Гы-гы
_________________
CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/yZqwPbJaCq
https://t.me/+ApizhYp4JD9kMjU6

Пользуйте мои моды как хотите....

Последний раз редактировалось: alexalsp (21:22 08-06-2026), всего редактировалось 2 раз(а)
    Добавлено: 21:22 08-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
P.S.
Вижу, что у некоторых кораблей есть позиция "<position ..."..
А у которых нет - придется брать позицию зоны.

У моих ничейных кораблей позиции нет ни у одного..
    Добавлено: 21:24 08-06-2026   
alexalsp
 542 EGP


Модератор
Рейтинг канала: 14(2392)
Репутация: 56
Сообщения: 4881

Зарегистрирован: 12.08.2014
а еще проверять изменился ли в паке какой та сев, что бы сразу сканить его автоматом , для вечно свежей инфы Хы...
_________________
CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/yZqwPbJaCq
https://t.me/+ApizhYp4JD9kMjU6

Пользуйте мои моды как хотите....
    Добавлено: 21:24 08-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
alexalsp :
а еще проверять изменился ли в паке какой та сев

Ну если брошенки периодически генерятся, то почему бы и нет Подмигиваю
Запустить прогу и чекнуть ничейники перед игрой - пара пустяков.
    Добавлено: 21:28 08-06-2026   
alexalsp
 542 EGP


Модератор
Рейтинг канала: 14(2392)
Репутация: 56
Сообщения: 4881

Зарегистрирован: 12.08.2014
igorVL :
У моих ничейных кораблей позиции нет ни у одного..


<component class="ship_s" owner="ownerless">
<docked connection="hangar" parent="ship_456"/>
</component>


может в доке
_________________
CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/yZqwPbJaCq
https://t.me/+ApizhYp4JD9kMjU6

Пользуйте мои моды как хотите....
    Добавлено: 21:28 08-06-2026   
igorVL
 65 EGP

Рейтинг канала: 6(280)
Репутация: 2
Сообщения: 302
Откуда: Москва
Зарегистрирован: 04.08.2023
alexalsp :
может в доке

Ага, Одиссей в доке летает. У ксенонов Хы...

добавлено спустя 16 минут:
alexalsp :
на гигабайтных севах , можно даже поиграть в игру , пока обработает

3 секунды обработка всего файла (0.5 Гб). Поиграть точно не успеешь Хы...
Это с выводом в консоль! Без вывода - секунды не будет.

Последний раз редактировалось: igorVL (21:56 08-06-2026), всего редактировалось 2 раз(а)
    Добавлено: 21:54 08-06-2026   
alexalsp
 542 EGP


Модератор
Рейтинг канала: 14(2392)
Репутация: 56
Сообщения: 4881

Зарегистрирован: 12.08.2014
Поиск кораблей

Выбор паки сейвов автоматом системно можно сделать открытие в папке егософт, что бы не лезть в мои документы егософт через дебри папок

2) Выбор папок сохранений запоминать путь к последней папке выбранного сохранения что бы не возвращаться обратно выбирать другое сохранение.
_________________
CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/yZqwPbJaCq
https://t.me/+ApizhYp4JD9kMjU6

Пользуйте мои моды как хотите....

Последний раз редактировалось: alexalsp (23:34 08-06-2026), всего редактировалось 2 раз(а)
    Добавлено: 23:33 08-06-2026   
Канал X4: Foundations: «[SOFT] X4:Полезный софт и модули для разработчиков»
На страницу: Пред.  1, 2, 3, 4, 5, 6, 7  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Сам по себе контейнер - просто ящик, но сейчас он не простой, т.к. в нём принцип был. (Filio)

  » [SOFT] X4:Полезный софт и модули для разработчиков | страница 3
Каналы: Новости | 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