|
|
|
|
Канал X4: Foundations: «[SOFT] X4:Полезный софт и модули для разработчиков» |
|
|
|
igorVL
65 EGP Рейтинг канала: 6(280) Репутация: 2 Сообщения: 302 Откуда: Москва Зарегистрирован: 04.08.2023
 |
|
Между костром шашлыком и пивом немного "подчесал" метод поиска кораблей и определение сектора нахождения от alexalsp.
Один из кораблей всегда находится "стандартно" в Порочной Логике (так и отображалось в проге).
Мои методы конкретизируют позицию точнее: "Порочная логика VII"...
Последний раз редактировалось: igorVL (12:54 07-06-2026), всего редактировалось 1 раз |
|
|
|
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 раз |
|
|
|
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 раз |
|
|
|
igorVL
65 EGP Рейтинг канала: 6(280) Репутация: 2 Сообщения: 302 Откуда: Москва Зарегистрирован: 04.08.2023
 |
|
| igorVL : |
|
(пока только для оригинальной игры)
|
+ теперь и для DLC!
Программа X4AbandonedShip:
|
Cкрытый текст (кликните здесь для просмотра)
|
|
|
|
|
igorVL
65 EGP Рейтинг канала: 6(280) Репутация: 2 Сообщения: 302 Откуда: Москва Зарегистрирован: 04.08.2023
 |
|
Программа X4AbandonedShip: (пред-релизная версия v.1.0.0.1)
- много чего исправлено
- удалено лишнее
- переработан интерфейс
|
Скрины (кликните здесь для просмотра)
|
... завтра еще немного "причешу" и выложу релиз программы в шапку темы для тестирования игроками.
|
|
|
|
igorVL
65 EGP Рейтинг канала: 6(280) Репутация: 2 Сообщения: 302 Откуда: Москва Зарегистрирован: 04.08.2023
 |
|
Вот координаты... Что они дают? В игре то их нет, т.е. будет трудно понять куда примерно лететь (по координатам)..
Может их убрать из поисковика?
И, все корабли, кроме Боронского, находятся фактически в центре секторов (судя по найденным координатам).. На самом деле в игре наверное не так, т.е. правильность этих координат вызывает сомнение..
|
|
|
|
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 раз(а) |
|
|
|
|
Argo
190 EGP
   Рейтинг канала: 9(1079) Репутация: 25 Сообщения: 1739 Откуда: Севастополь Зарегистрирован: 08.01.2005
 |
|
| igorVL : |
|
И, все корабли, кроме Боронского, находятся фактически в центре секторов (судя по найденным координатам).. На самом деле в игре наверное не так, т.е. правильность этих координат вызывает сомнение..
|
Да, в игре не так. Корабли как правило находятся на окраине сектора. Практически летим по примерному уже известному направлению, ориентируемся по позиции на карте, астероидам, вратам и пр., и уповаем на дальность корабельного радара чтобы показал цель. Т.е. практической пользы от координат ноль.
Тем не менее, думаю что они должны быть отражены в поисковике, для полноты инфы.
Последний раз редактировалось: Argo (12:05 08-06-2026), всего редактировалось 1 раз |
|
|
|
igorVL
65 EGP Рейтинг канала: 6(280) Репутация: 2 Сообщения: 302 Откуда: Москва Зарегистрирован: 04.08.2023
 |
|
| Argo : |
|
Т.е. практической пользы от координат ноль.
|
Ну вот я тоже так думаю. Ничейные корабли, на сколько помню, всегда где-то у черта на куличиках, а не в центре секторов.
| Argo : |
|
Тем не менее, думаю что они должны быть отражены в поисковике, для полноты инфы.
|
Хм.. Я их убрал (временно), т.к. пока пользы от них никакой. Просто абстрактные цифры.
Еще не вдавался в эти детали: откуда они берутся и как высчитываются (в первичном приложении от alexalsp).
Последний раз редактировалось: igorVL (12:12 08-06-2026), всего редактировалось 1 раз |
|
|
|
Argo
190 EGP
   Рейтинг канала: 9(1079) Репутация: 25 Сообщения: 1739 Откуда: Севастополь Зарегистрирован: 08.01.2005
 |
|
| igorVL : |
|
Еще не вдавался в эти детали: откуда они берутся и как высчитываются
|
В БД координаты ничейных кораблей указаны по осям x/y/z в километрах. Ноль в центре сектора. Информативно, так и находили на первый раз. В других стартах уже проще, летим по запомнившемуся направлению.
|
|
|
|
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 раз(а) |
|
|
|
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 минуты:
Главный смысл всех преобразований:
Сделать координаты читаемыми для человека:
Убрать дробную часть (не нужна для навигации)
Правильно отобразить отрицательные числа
Показать "не определены" вместо (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 раз(а) |
|
|
|
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
И так по кругу, пока не закончатся сектора.
|
|
|
|
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 раз(а) |
|
|
|
igorVL
65 EGP Рейтинг канала: 6(280) Репутация: 2 Сообщения: 302 Откуда: Москва Зарегистрирован: 04.08.2023
 |
|
P.S.
Вижу, что у некоторых кораблей есть позиция "<position ..."..
А у которых нет - придется брать позицию зоны.
У моих ничейных кораблей позиции нет ни у одного..
|
|
|
|
alexalsp
542 EGP
      Рейтинг канала: 14(2392) Репутация: 56 Сообщения: 4881
Зарегистрирован: 12.08.2014
 |
|
а еще проверять изменился ли в паке какой та сев, что бы сразу сканить его автоматом , для вечно свежей инфы
_________________ CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/yZqwPbJaCq
https://t.me/+ApizhYp4JD9kMjU6
Пользуйте мои моды как хотите.... |
|
|
|
igorVL
65 EGP Рейтинг канала: 6(280) Репутация: 2 Сообщения: 302 Откуда: Москва Зарегистрирован: 04.08.2023
 |
|
| alexalsp : |
|
а еще проверять изменился ли в паке какой та сев
|
Ну если брошенки периодически генерятся, то почему бы и нет
Запустить прогу и чекнуть ничейники перед игрой - пара пустяков.
|
|
|
|
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
Пользуйте мои моды как хотите.... |
|
|
|
igorVL
65 EGP Рейтинг канала: 6(280) Репутация: 2 Сообщения: 302 Откуда: Москва Зарегистрирован: 04.08.2023
 |
|
Ага, Одиссей в доке летает. У ксенонов
добавлено спустя 16 минут:
| alexalsp : |
|
на гигабайтных севах , можно даже поиграть в игру , пока обработает
|
3 секунды обработка всего файла (0.5 Гб). Поиграть точно не успеешь
Это с выводом в консоль! Без вывода - секунды не будет.
Последний раз редактировалось: igorVL (21:56 08-06-2026), всего редактировалось 2 раз(а) |
|
|
|
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 раз(а) |
|
|
|
|
|
|
|
|
Канал X4: Foundations: «[SOFT] X4:Полезный софт и модули для разработчиков» |
|
|